2012-08-08 15 views
11

मैं एक listview एडाप्टर है और मैं newView विधि में निम्नलिखित कोशिश कर रहा हूँ प्राप्त करने के लिए:कैसे एंड्रॉयड संपर्क थंबनेल

@Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 

     final LayoutInflater inflater = LayoutInflater.from(context); 
     View v = inflater.inflate(layout, parent, false); 

     long contactId = Long.valueOf(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID))); 
     String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     boolean hasPhone = Boolean.parseBoolean(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))); 
     String thumbnailUri = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_THUMBNAIL_URI)); 

     TextView name_text = (TextView) v.findViewById(R.id.name_entry); 
     if (name_text != null) { 
      name_text.setText(contactName); 
     } 

     name_text.setTag(new Contact(contactId, hasPhone)); 

     ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail); 
     if (thumbnailUri != null) { 
      thumbnail.setImageURI(Uri.parse(thumbnailUri)); 
     } else { 
      thumbnail.setImageResource(R.drawable.ic_launcher); 
     } 

     return v; 
    } 

लेकिन जब मैं उरी कि thumbnailUri में संग्रहित है पार्स करने के लिए प्रयास करते हैं, मैं प्राप्त निम्नलिखित त्रुटि:

08-09 01:58:38.619: I/System.out(1471): resolveUri failed on bad bitmap uri: content://com.android.contacts/contacts/1/photo 

क्या मैं इस गलत तरीके से जा रहा हूं? किसी भी तरह की सहायता का स्वागत किया जाएगा!

+0

क्या आप यूआरआई को हल करने का प्रयास कर रहे हैं और इसे यहां पोस्ट करने के लिए वहां एक लॉगकट जानकारी डाल सकते हैं? Log.i ("यूआरआई", थंबनेलउरी); – RyanInBinary

+0

सामग्री: //com.android.contacts/contacts/1/photo, जो मुझे विश्वास है सही है। शायद यह इसलिए है क्योंकि मैं एक एमुलेटर का उपयोग कर रहा हूँ। मुझे एक वास्तविक डिवाइस प्राप्त करने की आवश्यकता है:/ –

+1

बस मुझे एक असली डिवाइस मिला। यह काम करता है, मेरा कोड ठीक है। –

उत्तर

12
private Uri getPhotoUriFromID(String id) { 
    try { 
     Cursor cur = getContentResolver() 
       .query(ContactsContract.Data.CONTENT_URI, 
         null, 
         ContactsContract.Data.CONTACT_ID 
           + "=" 
           + id 
           + " AND " 
           + ContactsContract.Data.MIMETYPE 
           + "='" 
           + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE 
           + "'", null, null); 
     if (cur != null) { 
      if (!cur.moveToFirst()) { 
       return null; // no photo 
      } 
     } else { 
      return null; // error in cursor process 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
    Uri person = ContentUris.withAppendedId(
      ContactsContract.Contacts.CONTENT_URI, Long.parseLong(id)); 
    return Uri.withAppendedPath(person, 
      ContactsContract.Contacts.Photo.CONTENT_DIRECTORY); 
} 

इस समारोह जहां संपर्क आईडी उत्तीर्ण करने की आवश्यकता है और आप छवि आप imageView में आसानी से सेट कर सकते हैं जिनमें से यूआरआई मिल जाएगा।

उपयोग imageView.setImageURI (URI) की तरह इस समारोह की प्रतिक्रिया uri

आशा है कि यह आपके कोड के लिए काम करेंगे।

+0

इसे आजमाया, और यह वही उरी लौटाता है जैसा कि मैं पहले से ही प्राप्त कर रहा था (सामग्री: //com.android.contacts/contacts/1/photo) दुर्भाग्यवश। मुझे अभी भी एक ही त्रुटि संदेश प्राप्त हो रहा है। –

+0

वहाँ दो आईडी संपर्क है। एक संपर्क आईडी है और दूसरा कच्चा संपर्क आईडी है, तो आप किस आईडी को काम करने की आपूर्ति कर रहे हैं? यह आईडी के साथ समस्या हो सकती है और इसलिए इसे उरी नहीं मिल रहा है। –

+0

ने यह भी कोशिश की: 'स्ट्रिंग स्ट्रिंगयूरी = imageUri.getPath(); // वर्क्स ' 'स्ट्रिंग स्ट्रिंगयूरी = imageUri.toString(); // काम नहीं करता है 'i.setImageURI (Uri.parse (stringUri));' यह आपके लिए काम करता है। क्योंकि मेरे कोड फ़ंक्शन में सही तरीके से काम करता है। –

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