无法从联系人db中检索数据

时间:2015-10-13 11:57:59

标签: android exception cursor indexoutofboundsexception cts

我使用以下代码:

preparePeople();
final Cursor c = mContext.getContentResolver().query(People.CONTENT_URI, mPROJECTION, null, null, null);
String s = c.getString(1);

private void preparePeople() {
    final ContentResolver mResolver = mContext.getContentResolver();
    mResolver.delete(People.CONTENT_URI, null, null);
    final ContentValues valuse = new ContentValues();
    valuse.put(People._ID, "1");
    valuse.put(People.NAME, "name");
    Uri uri = mResolver.insert(People.CONTENT_URI, valuse);
}

但在执行上述代码时,我得到如下例外:

android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 0

由于 c.getString(1)声明根据日志,但我不知道为什么..有人可以帮助解决此错误吗?

1 个答案:

答案 0 :(得分:4)

首先,当您第一次获得结果时,Cursor位于第一行结果之前。致电moveToFirst()moveToPosition()或其他内容,将Cursor移至您想要的行。

其次,Cursor中的列从0开始编号,与计算机编程中的大多数内容一样。除非mPROJECTION有2个以上的条目,并且您真的想要一个索引为1的条目,否则您可能需要调用getString(0),因为MD会在评论中指出。

第三,请记住there are cases where you might not get any results back,因此您可能需要在继续之前检查从query()返回的行数。