CursorIndexOutOfBoundsException 是什么意思?

What does CursorIndexOutOfBoundsException mean?

InfoAPI.java

当我点击保存按钮时,它崩溃了。我该如何解决这个问题?

public long insertTimeSheet(String name,String weather,String date,String status)
    {
        database=dbHelper.getWritableDatabase();
        ContentValues values=new ContentValues();
        values.put(MyDatabaseHelper.Name,name);
        values.put(MyDatabaseHelper.Weather,weather);
        values.put(MyDatabaseHelper.Date,date);
        values.put(MyDatabaseHelper.Status, status);
        Cursor cursor = database.rawQuery("SELECT MAX(ID) FROM "+ MyDatabaseHelper.TABLE_INFO, null);
        database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
        return cursor.getLong(0);

    }

LogCat

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1
            at android.database.AbstractCursor.checkPosition(AbstractCursor.java:460)
            at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
            at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
            at com.example.project.project.API.InfoAPI.insertTimeSheet(InfoAPI.java:42)

我已经发布了关于 Foreign Key 的问题。

A CursorIndexOutOfBoundsException 表示您尝试获取或写入数据的 Cursor 当前未位于有效的结果行中。请特别注意,从 rawQuery() 获得的 Cursor 最初位于第一行之前。这在一定程度上是明智的,因为在查询 returns 零行的情况下,它是 Cursor 可以 定位的唯一位置。

您通常会使用游标的定位方法将其移动到您要访问的行。为了按顺序处理所有行,通常是 moveToNext()。还有moveToFirst()moveToLast()moveToPrevious()moveToPosition()move()

public long insertTimeSheet(String name,String weather,String date,String status){
  database=dbHelper.getWritableDatabase();
  ContentValues values=new ContentValues();
  values.put(MyDatabaseHelper.Name,name);
  values.put(MyDatabaseHelper.Weather,weather);
  values.put(MyDatabaseHelper.Date,date);
  values.put(MyDatabaseHelper.Status, status);
  database.insert(MyDatabaseHelper.TABLE_INFO, null, values);
  Cursor cursor = database.rawQuery("SELECT MAX(ID) FROM "+ MyDatabaseHelper.TABLE_INFO, null);
  if(cursor.getCount()>0){
    cursor.moveToFirst();
    return cursor.getLong(0);
  }

  return 0;
}