【问题标题】:While running application: Getting error "Index 0 requested, with a size of 0"运行应用程序时:出现错误“请求索引 0,大小为 0”
【发布时间】:2014-09-24 10:24:23
【问题描述】:

在移动/设备上启动应用程序时,我收到“请求索引 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

【问题讨论】:

  • 您应该首先使用resultSet.moveToFirst()移动到光标的第一条记录
  • 你应该在遍历结果集之前使用resultSet.moveToFirst()
  • 嗨 Sagar Pilkhwal,我在 IF 条件之前添加了 resultSet.moveToFirst() 但它不起作用。我遇到了同样的错误。

标签: android android-sqlite


【解决方案1】:

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

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

【讨论】:

  • 嗨,MD 感谢您的快速回复。我没有看到你上面提到的代码和我的代码有什么不同。但是,正如您所建议的,我在 IF 条件之前尝试了如下操作,但它不起作用。我得到同样的错误。 resultSet.moveToNext(); if (resultSet != null && resultSet.moveToNext());
  • :) 明白了。我的错。让我试试这个。
  • 我使用了以下,但仍然是同样的错误。请建议。 if (resultSet != null && resultSet.moveToFirst());
  • 我尝试了几件事并多次错误地编辑代码。我使用了 moveToNext() 而不是 moveToFirst()。但是,这仍然不起作用。感谢你的帮助。启动应用程序时出现错误。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    你应该首先在 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

    【讨论】:

      猜你喜欢
      • 2018-06-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 2016-02-09
      • 2012-05-01
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多