2011-01-31 9 views
18

以下は私のコードです。android.database.CursorIndexOutOfBoundsException:インデックス-1が要求され、サイズ2のエラーが発生しました。それを解決する方法を教えてもらえますか?android.database.CursorIndexOutOfBoundsException:インデックス-1が要求されました。サイズは2です。

ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, 
    null, null, null, null); 
    if (Integer.parseInt(cur.getString(
    cur.getColumnIndex(People.PRIMARY_PHONE_ID))) > 0) { 

    Cursor pCur = cr.query(
    Contacts.Phones.CONTENT_URI, 
    null, 
    Contacts.Phones.PERSON_ID +" = ?", 
    new String[]{id}, null); 
    int i=0; 
    int pCount = pCur.getCount(); 
    String[] phoneNum = new String[pCount]; 
    String[] phoneType = new String[pCount]; 
    while (pCur.moveToNext()) { 
    phoneNum[i] = pCur.getString(
     pCur.getColumnIndex(Contacts.Phones.NUMBER)); 
    phoneType[i] = pCur.getString(
     pCur.getColumnIndex(Contacts.Phones.TYPE)); 
    i++; 
    } 
    } 
} 
} 
+0

「phoneType」とは何ですか?また、質問を編集してコードを正しくフォーマットする必要があります。 – Falmarri

+0

このエラーが発生している可能性がありますあなたはウルトラエミュレータで連絡先を追加していないbcoz .......... –

+0

あなたはAndroidManifestに適切な権限を追加しましたか? – Sriram

答えて

61

あなたがCursorオブジェクトを配置するために必要なよりも、あなたがCursorオブジェクトからデータにアクセスしている場合。

実際には、Cursorを最初の行に配置する必要があります。

cur.moveToFirst();行の後ろにコードCursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);を入れてください。

また、連絡先を取得するために古いAPIを使用していないことを確認してください。

+0

tks。私は別のエラーnwを得た。原因:java.lang.IllegalStateException:行0列-1からフィールドスロットを取得できませんでした – user596379

+1

おそらくあなたが無効な列名を使用していることを意味します。連絡先(携帯番号)だけを読んでみたい場合は、この質問をご覧ください。http://stackoverflow.com/questions/1721279/how-to-read-contacts-on-android-2-0 –

+0

ok。 tks。私はリンクを試してみます。それ以上の質問があれば、私はそれを再び投稿します。 – user596379

関連する問題