运行应用程序时:获取错误“请求索引0,大小为0”

时间:2014-09-24 10:24:23

标签: android android-sqlite

我在移动/设备上启动应用程序时收到“请求索引0,大小为0”。 我打电话时确保光标不是'空'。 我发现了一些类似的问题并且在我的场景中感到厌倦但是没有用。

我有这段代码:

        SQLiteDatabase db = mDbHelper.getReadableDatabase();
        Cursor resultSet=db.rawQuery("select * from NoteTable", null);
        String[] values = new String[resultSet.getCount()];
        if (resultSet != null && resultSet.moveToNext());
        {
            do {
                if (resultSet != null) {
                    values[i] = resultSet.getString(resultSet.getColumnIndex("noteTitle"));
                    i++;
                }
            }while (resultSet.moveToNext());
            resultSet.close();
        }
        db.close();
        return values;

我得到以下例外:
09-24 15:28:23.845 25800-25800 / com.example.ashv.actionbar W / System.err:java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.ashv.actionbar / com.example.ashv .actionbar.MyActivity}:android.database.CursorIndexOutOfBoundsException:请求索引0,大小为0

3 个答案:

答案 0 :(得分:1)

您应首先使用Cursor移至moveToFirst()的第一条记录,例如

  if (resultSet != null && resultSet.moveToFirst());
    {
        do {
            if (resultSet != null) {
                values[i] = resultSet.getString(resultSet.getColumnIndex("noteTitle"));
                i++;
            }
        }while (resultSet.moveToNext());
        resultSet.close();
    }

答案 1 :(得分:0)

我上面提到的代码中没有问题(当然在Manish更正之后)。

我发现在我的应用程序中,我使用的是“App抽屉”。 '应用程序抽屉'代码检查列表中显示的所有内容以及应该来自数据库的所有内容(即使用此代码。从数据库中读取)。这给了我错误“请求索引0,大小为0”。这是指App drwaer值。我删除了应用程序抽屉部分,这个代码工作正常(即我的应用程序没有崩溃,也没有例外)。我需要找到动态'App抽屉'的解决方案(这将是不同的故事)。

如果您想知道您的代码有什么问题,我刚才提到了这一点。那么您可能需要查看应用程序的其他部分/模块。

答案 2 :(得分:0)

您应该首先在resultSet上调用moveToNext方法

while(resultSet.moveToNext){

 if(resultSet != null) {
                values[i] = resultSet.getString(resultSet.getColumnIndex("noteTitle"));
            }

}
resultSet.close()

有关从sqlite数据库https://developer.android.com/training/data-storage/sqlite读取的详细信息