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目的の行に移動します。

次に、a の列にはCursor、コンピューター プログラミングのほとんどの場合と同様に、0 から始まる番号が付けられます。MDがコメントで指摘しているように、mPROJECTION2つ以上のエントリがあり、実際に index を持つエントリが必要な場合を除き1、おそらく を呼び出す必要があります。getString(0)

3 番目に、結果が返されない場合があることquery()に注意してください。続行する前に、 から返された行数を確認することをお勧めします。

于 2015-10-13T12:02:41.327 に答える