0

我正在使用以下代码:

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)语句,但我不知道为什么..有人可以帮忙解决这个错误吗?

4

1 回答 1

4

首先,Cursor当您第一次获得 a 时,它位于第一行结果之前。呼叫moveToFirst()moveToPosition()或其他东西将其移动Cursor到您想要的行。

其次,aCursor中的列从 0 开始编号,就像计算机编程中的大多数事情一样。除非mPROJECTION有 2 个以上的条目,并且您真的想要带有 index 的条目,否则1您可能想要调用getString(0)MD,正如 MD 在评论中指出的那样。

第三,请记住,在某些情况下您可能无法返回任何结果,因此您可能需要在继续之前检查从您返回的行数query()

于 2015-10-13T12:02:41.327 回答