2011-03-30 76 views
0

我正在研究使用游标查询内容提供者的方法。删除记录后,它会调用loadfromProvider方法并刷新数组列表。内容提供者通常在其中有记录,但是,当我删除所有记录并且查询自动运行时,它会抛出异常。这里是我的方法:查询没有记录的内容提供者?

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)

我认为这是由于游标试图解析空值。我试图找出一种方式,如果光标不回来任何记录,它绕过其余的代码,并没有发生任何事情。

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

回答

1

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

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

+1

是正确的。请参阅:http://stackoverflow.com/questions/5122099/sqlite-delete-last-row-refresh-not-working/5122218#5122218进行相关讨论。在这种情况下,我认为错误在代码中稍后发生。通过if()块,执行c.close(),稍后可能会出现错误,尝试使用您(未填写)的空数据集。 – jcwenger 2011-04-10 19:03:21