【问题标题】:Querying a content provider that has no records?查询没有记录的内容提供者?
【发布时间】:2011-03-30 00:42:32
【问题描述】:

我正在研究一种使用游标查询内容提供者的方法。在我删除一条记录后,它会调用loadfromProvider 方法并刷新arraylist。内容提供者通常在其中包含记录,但是,当我删除所有记录并且查询自动运行时,它会引发异常。这是我的方法:

private void loadFromProvider() {

    // Clear the existing array list

    EQlist.clear();

      ContentResolver cr = getContentResolver();

      // Return all the saved records
      Cursor c = cr.query(EQProvider.CONTENT_URI, null, null, null, null);

      if (c.moveToFirst()) {
        do { 

          String details = c.getString(EQProvider.DETAILS_COLUMN);
          String linkString = c.getString(EQProvider.LINK_COLUMN);

          EQli q = new EQli(details, linkString);
          addEQToArray(q);
        } while(c.moveToNext());
      }
      c.close();
      }

当我在内容提供程序中没有记录的情况下运行它时,它会抛出以下内容:

java.lang.IndexOutOfBoundsException:索引 1 无效,大小为 1 在 java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:257)

我认为这是由于光标试图解析空值。我试图找出一种方法,如果光标没有返回任何记录,它会绕过其余代码并且什么都不发生。

任何帮助将不胜感激。谢谢

【问题讨论】:

    标签: android null cursor android-contentresolver


    【解决方案1】:

    如果没有记录,您的光标应该是空的。如果光标为空,则c.moveToFirst() 将返回false,您不会进入do-while 循环。

    调试您的应用程序并确保光标为空。

    【讨论】:

    • 是正确的。另请参阅:stackoverflow.com/questions/5122099/… 进行相关讨论。在这里的情况下,我认为错误发生在代码的后面。您通过 if() 块,执行 c.close() 并可能在稍后得到您的错误,尝试使用您(没有)填充的空数据集。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多