2012-09-01 25 views
5

प्राप्त करें मैं एक संपर्क पिकर से संपर्क चित्र, संपर्क नाम और मोबाइल फोन नंबर पुनर्प्राप्त करने का प्रयास कर रहा हूं। एक बार जब मैं संपर्क पिकर में संपर्क का चयन करता हूं, तो मैं उन तीन चीजों को पुनः प्राप्त करने में सक्षम होना चाहता हूं।एंड्रॉइड संपर्क चित्र, नाम, और मोबाइल नंबर

मैं संपर्क पिकर से संपर्क आईडी पुनर्प्राप्त करने में सफलतापूर्वक सक्षम हूं, लेकिन मुझे उस आईडी का उपयोग करके काम करने के लिए और कुछ नहीं मिल रहा है।

मैंने सभी प्रकार के नमूना कोड को देखा है, और वे सभी कर्सर का उपयोग करते हैं, और कर्सर के साथ अलग-अलग चीजें करते हैं, लेकिन मुझे नहीं पता कि यह सब कैसे काम करता है। क्या कोई मेरी मदद कर सकता है?

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"); 
    } 
} 

यह काम करता है जब तक कर्सर असाइन किया गया है:

यहाँ कुछ कोड है कि मैं कोशिश की है है। मुझे आईडी ठीक से मिलती है, लेकिन जब मैं नाम, संख्या या संपर्क चित्र पुनर्प्राप्त करने का प्रयास करता हूं तो मुझे एक एफसी मिलती है।

यह मैं क्या एक 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

आह महान! और अब जब आप कहते हैं कि एक एफसी है, तो क्या हम लॉगबैक भी देख सकते हैं? – Swayam

उत्तर

1

आपका कर्सर -1 सूचकांक और इसलिए त्रुटि का उपयोग करने की कोशिश कर रहा है। कॉलम से विवरण प्राप्त करने का प्रयास करने से पहले cursor.moveToFirst() का उपयोग करने का प्रयास करें।

संबंधित मुद्दे