2012-09-01 12 views
5

連絡先の画像、連絡先の名前、携帯電話の番号を連絡先選択ツールから取得しようとしています。連絡先選択ツールで連絡先を選択すると、その3つのものを取得できます。アンドロイドは連絡先の画像、名前、携帯電話番号を取得します

私はコンタクトピッカーからコンタクトIDを取得することに成功しましたが、そのIDを使用して作業するために何かを得ることはできません。

私はすべての種類のサンプルコードを見てきましたが、それらはすべてカーソルを使用し、カーソルとは別のことを行いますが、どのように動作するのか分かりません。誰かが私を助けることができますか?カーソルが割り当てられるまで

public void launchContactPicker(View view) { 
    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
      ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (resultCode == RESULT_OK) { 
     switch (requestCode) { 
      case CONTACT_PICKER_RESULT: 
       Cursor cursor; 
       Bundle extras = data.getExtras(); 
       if(extras != null) 
       { 
        Set<String> keys = extras.keySet(); 
        for (String key : keys) { 
         extras.get(key); 
        } 
       } 
       else 
       { 
        Log.v("Auto Respond", "No extras returned from contact."); 
       } 

       Uri result = data.getData(); 
       String id = result.getLastPathSegment(); 

       cursor = getContentResolver().query(
         ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
         null, 
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
         new String[]{id}, null); 

       contactName = cursor.getString(cursor.getColumnIndex((ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))); 

       Uri photo = Uri.withAppendedPath(result, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
       //contactPicture = Contacts.People.loadContactPhoto(this, getStuff, R.drawable.ic_contact_picture, null); 
       contactNumber = cursor.getString(cursor.getColumnIndex((ContactsContract.CommonDataKinds.Phone.NUMBER))); 

       //Log.v(DEBUG_TAG, "Got a result: " + result.toString()); 
       cursor.close(); 
       break; 
     } 

    } else { 
     // gracefully handle failure 
     Log.w("Auto Respond", "Warning: activity result not ok"); 
    } 
} 

それは、最大動作します:

は、ここで私が試したいくつかのコードです。私はIDを正しく取得しますが、名前、番号、連絡先の画像を取得しようとするとFCが取得されます。

これは私がlogcatから得るものです:

E/AndroidRuntime(23957): FATAL EXCEPTION: main 
E/AndroidRuntime(23957): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1001, result=-1, data=Intent { dat=content://com.android.contacts/contacts/lookup/1760i2bd7c02a0fcd76ea/407 flg=0x1 }} to activity {com.havens1515.autorespond/com.havens1515.autorespond.NoResponse}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1 
E/AndroidRuntime(23957): at android.app.ActivityThread.deliverResults(ActivityThread.java:3264) 
E/AndroidRuntime(23957): at android.app.ActivityThread.handleSendResult(ActivityThread.java:3307) 
E/AndroidRuntime(23957): at android.app.ActivityThread.access$1100(ActivityThread.java:139) 
E/AndroidRuntime(23957): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1253) 
E/AndroidRuntime(23957): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(23957): at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(23957): at android.app.ActivityThread.main(ActivityThread.java:4896) 
E/AndroidRuntime(23957): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(23957): at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(23957): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:791) 
E/AndroidRuntime(23957): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:558) 
E/AndroidRuntime(23957): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(23957): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1 
E/AndroidRuntime(23957): at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418) 
E/AndroidRuntime(23957): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136) 
E/AndroidRuntime(23957): at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50) 
E/AndroidRuntime(23957): at android.database.CursorWrapper.getString(CursorWrapper.java:114) 
E/AndroidRuntime(23957): at com.havens1515.autorespond.NoResponse.onActivityResult(NoResponse.java:206) 
E/AndroidRuntime(23957): at android.app.Activity.dispatchActivityResult(Activity.java:5192) 
E/AndroidRuntime(23957): at android.app.ActivityThread.deliverResults(ActivityThread.java:3260) 
E/AndroidRuntime(23957): ... 11 more 
+0

まだコードを試しましたか? – Swayam

+0

投稿を編集して、私が試したコードをいくつか追加しました。 – Randy

+0

すごい! FCがあると言うと、logcatもあまりにも喜ばれるのですか? – Swayam

答えて

1

あなたのカーソルが-1インデックスので、エラーにアクセスしようとしています。列から詳細を取得する前に、cursor.moveToFirst()を試してみてください。

関連する問題