Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Cursor.getInt()引发CursorIndexOutOfBoundsException_Android_Sqlite - Fatal编程技术网

Android Cursor.getInt()引发CursorIndexOutOfBoundsException

Android Cursor.getInt()引发CursorIndexOutOfBoundsException,android,sqlite,Android,Sqlite,因此,我在SQLiteDatabaseHelper类中有一个方法,它读取一个数字并返回一个布尔值,如上图所示。但是,执行代码只会引发以下异常: 06-28 19:49:45.881: E/AndroidRuntime(355): FATAL EXCEPTION: main 06-28 19:49:45.881: E/AndroidRuntime(355): android.database.CursorIndexOutOfBoundsException: Index 0 requested, w

因此,我在
SQLiteDatabaseHelper
类中有一个方法,它读取一个数字并返回一个布尔值,如上图所示。但是,执行代码只会引发以下异常:

06-28 19:49:45.881: E/AndroidRuntime(355): FATAL EXCEPTION: main
06-28 19:49:45.881: E/AndroidRuntime(355): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.mowdownDevelopments.nagTasks.NagTasksDatabaseHelper.isTaskChecked(NagTasksDatabaseHelper.java:239)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.mowdownDevelopments.nagTasks.NagTaskListFragment.onPrepareActionMode(NagTaskListFragment.java:184)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.actionbarsherlock.internal.ActionBarSherlockCompat$ActionModeCallbackWrapper.onPrepareActionMode(ActionBarSherlockCompat.java:1181)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.actionbarsherlock.internal.app.ActionBarImpl$ActionModeImpl.invalidate(ActionBarImpl.java:713)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.actionbarsherlock.internal.app.ActionBarImpl.startActionMode(ActionBarImpl.java:405)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.actionbarsherlock.internal.ActionBarSherlockCompat.startActionMode(ActionBarSherlockCompat.java:178)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.actionbarsherlock.app.SherlockFragmentActivity.startActionMode(SherlockFragmentActivity.java:50)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.mowdownDevelopments.nagTasks.NagTaskListFragment.onListItemClick(NagTaskListFragment.java:62)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.support.v4.app.ListFragment$2.onItemClick(ListFragment.java:58)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.widget.AdapterView.performItemClick(AdapterView.java:284)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.widget.ListView.performItemClick(ListView.java:3382)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.widget.AbsListView$PerformClick.run(AbsListView.java:1696)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.os.Handler.handleCallback(Handler.java:587)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.os.Handler.dispatchMessage(Handler.java:92)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.os.Looper.loop(Looper.java:123)
06-28 19:49:45.881: E/AndroidRuntime(355):  at android.app.ActivityThread.main(ActivityThread.java:4627)
06-28 19:49:45.881: E/AndroidRuntime(355):  at java.lang.reflect.Method.invokeNative(Native Method)
06-28 19:49:45.881: E/AndroidRuntime(355):  at java.lang.reflect.Method.invoke(Method.java:521)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
06-28 19:49:45.881: E/AndroidRuntime(355):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
06-28 19:49:45.881: E/AndroidRuntime(355):  at dalvik.system.NativeStart.main(Native Method)
这就指出了问题所在:

public boolean isTaskChecked(long taskID){
        SQLiteDatabase db = getReadableDatabase();
        String[] columns = {ID, CHECKED};
        Cursor c = db.query(TASKS, columns, "_id="+taskID, null, null, null, null);
        c.moveToFirst();
        int boolAsInt = c.getInt(1); //This line is throwing.
        //db.close();
        c.close();
        if (boolAsInt==1) {
            return true;
        } else if (boolAsInt==0) {
            return false;
        } else {
            panicButton();
        }
        return false;
    }
如图所示,通过ADB执行查询返回的结果很好。(我在那里使用了一个通用查询,但是
select\u-id,从任务中检查,\u-id=1;
工作得很好。)我不明白为什么它说我在请求索引0,而代码显然是在请求列索引1,而在shell中执行查询时大小如何为0给了我一些有效的东西(而且不是基于零的大小?). 有人能帮我调试一下吗

[编辑:所以,问题是,对于这个特殊问题,我总是从另一个类传递-1。很抱歉浪费了大家的时间。

请执行以下操作:

if(c.moveToFirst()){
    int boolAsInt = c.getInt(1);
}
光标可能为空,因此在尝试从中获取任何值之前,必须检查此项。 如果光标为空,则moveToFirst()返回false,因此不会输入if,也不会再出现异常

空游标的原因是SQL查询返回的结果集为空。如果您确定应该获得非空集,请再次检查查询。

执行以下操作:

if(c.moveToFirst()){
    int boolAsInt = c.getInt(1);
}
光标可能为空,因此在尝试从中获取任何值之前,必须检查此项。 如果光标为空,则moveToFirst()返回false,因此不会输入if,也不会再出现异常


空游标的原因是SQL查询返回的结果集为空。如果您确定应该获得一个非空集,请再次检查查询。

getInt方法的参数是索引,因此,如果您尝试获取查询的第一列,则应将其设置为0。

getInt方法的参数是索引,因此如果您尝试获取查询的第一列,您应该输入0。

我使用与问题中的SQL查询相匹配的
rawquery
得到了这个错误,并且明显地用一个数字替换了一个变量。我不应该得到一个空集。我使用了一个与问题中的SQL查询匹配的
rawquery
得到了这个错误,并用一个数字替换了一个变量。我不应该得到一套空的。