CursorIndexOutOfBoundsException:请求索引0,大小为0。错误-Android

CursorIndexOutOfBoundsException:请求索引0,大小为0。错误-Android,android,sqlite,exception,expandablelistview,Android,Sqlite,Exception,Expandablelistview,我试图在expandableListView中获取一个孩子的位置id,并根据点击的孩子启动另一个类,我是这样做的: @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // TODO Auto-generated method stub super.

我试图在expandableListView中获取一个孩子的位置id,并根据点击的孩子启动另一个类,我是这样做的:

    @Override
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) 
    {
        // TODO Auto-generated method stub
        super.onChildClick(parent, v, groupPosition, childPosition, id);
        Intent i = new Intent(this, SavedEntries.class);
        i.putExtra("_id", id);
        startActivityForResult(i, ACTIVITY_EDIT);
        return super.onChildClick(parent, v, groupPosition, childPosition, id);
    }
但我一直在犯这样的错误:

01-05 13:14:28.232: E/AndroidRuntime(316): FATAL EXCEPTION: main
01-05 13:14:28.232: E/AndroidRuntime(316): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.x17.projects.strikezone/com.x17.projects.strikezone.SavedEntries}: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.os.Handler.dispatchMessage(Handler.java:99)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.os.Looper.loop(Looper.java:123)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.app.ActivityThread.main(ActivityThread.java:4627)
01-05 13:14:28.232: E/AndroidRuntime(316):  at java.lang.reflect.Method.invokeNative(Native Method)
01-05 13:14:28.232: E/AndroidRuntime(316):  at java.lang.reflect.Method.invoke(Method.java:521)
01-05 13:14:28.232: E/AndroidRuntime(316):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
01-05 13:14:28.232: E/AndroidRuntime(316):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
01-05 13:14:28.232: E/AndroidRuntime(316):  at dalvik.system.NativeStart.main(Native Method)
01-05 13:14:28.232: E/AndroidRuntime(316): Caused by: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.database.AbstractCursor.checkPosition(AbstractCursor.java:580)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:214)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:41)
01-05 13:14:28.232: E/AndroidRuntime(316):  at com.x17.projects.strikezone.SavedEntries.getDateRow(SavedEntries.java:56)
01-05 13:14:28.232: E/AndroidRuntime(316):  at com.x17.projects.strikezone.SavedEntries.onCreate(SavedEntries.java:48)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
01-05 13:14:28.232: E/AndroidRuntime(316):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
01-05 13:14:28.232: E/AndroidRuntime(316):  ... 11 more
这是我将id发送到的位置:

Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong("_id") : null;

    private void getDateRow()
    {
        Cursor mCursor = mDbHelper.fetchRow(mRowId);
        date = mCursor.getString(0); //Line 56, this is where the error occurs.
        mCursor.close();
    }
下面是对上述内容的查询:

public Cursor fetchRow(long rowId)
    {
        Cursor cursor = mDb.rawQuery("SELECT date FROM entry WHERE _id=" + rowId, null);
        if(cursor != null)
        {
            cursor.moveToFirst();
        }
        return cursor;
    }
为什么我会犯这个错误?我做错了什么


提前感谢。

这是因为游标中没有任何行。确保fetchRow(…)确实返回了一些数据。日期字段是否为字符串类型?

这是因为游标中没有任何行。确保fetchRow(…)确实返回了一些数据。日期字段是否为字符串类型?

光标位于空位置。循环遍历光标以获取行

while(mCursor.moveToNext()) {
    date = mCursor.getString(0);
}

光标位于空位置。循环遍历光标以获取行

while(mCursor.moveToNext()) {
    date = mCursor.getString(0);
}

在getDateRow方法中,调用
mCursor.moveToFirst()
方法,然后再从中获取任何内容。最好将其用作条件,因为
mCursor.moveToFirst()
返回一个布尔值,如果光标可以移动到第一个,则该值为true;如果光标不能移动,则返回false。 我的意思是:

   private void getDateRow(){
        Cursor mCursor = mDbHelper.fetchRow(mRowId);
        if (mCursor.moveToFirst()){
        date = mCursor.getString(0);
        }
        mCursor.close();
    }

在getDateRow方法中,调用
mCursor.moveToFirst()
方法,然后再从中获取任何内容。最好将其用作条件,因为
mCursor.moveToFirst()
返回一个布尔值,如果光标可以移动到第一个,则该值为true;如果光标不能移动,则返回false。 我的意思是:

   private void getDateRow(){
        Cursor mCursor = mDbHelper.fetchRow(mRowId);
        if (mCursor.moveToFirst()){
        date = mCursor.getString(0);
        }
        mCursor.close();
    }

是的,日期字段是一个字符串。我检查了光标计数,它是0,这就是为什么会发生此错误。还有什么方法可以从被单击以将其传递给SavedEntries.class的子级获取id?调试并查看id是否在onChildClick方法中获取所需值。由于某些原因,调用onChildClick时,groupPosition、childPosition和id都将获取0值。您需要找出原因,我认为粘贴在这里的数据库检索逻辑没有任何问题。当您修复这个其他问题时,它应该工作得很好。我刚开始使用ListView,它工作得非常好。但当我把它改为ExpandableListView时,我开始出现这个问题。所以可能这个方法没有被正确调用或者其他什么?因为它没有给我子职位的id。是的,日期字段是一个字符串。我检查了光标计数,它是0,这就是为什么会发生此错误。还有什么方法可以从被单击以将其传递给SavedEntries.class的子级获取id?调试并查看id是否在onChildClick方法中获取所需值。由于某些原因,调用onChildClick时,groupPosition、childPosition和id都将获取0值。您需要找出原因,我认为粘贴在这里的数据库检索逻辑没有任何问题。当您修复这个其他问题时,它应该工作得很好。我刚开始使用ListView,它工作得非常好。但当我把它改为ExpandableListView时,我开始出现这个问题。所以可能这个方法没有被正确调用或者其他什么?因为它没有给我孩子的身份证。