2012-08-08 12 views
11

Ho un adattatore listview e sto cercando il seguente nel metodo newView:Come arrivare Android contatto delle miniature

@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; 
    } 

Ma quando provo ad analizzare l'Uri che è memorizzato nel thumbnailUri, viene visualizzato il errore seguente:

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

Sto andando su questo nel modo sbagliato? Qualsiasi aiuto sarebbe molto apprezzato!

+0

Puoi inserire le informazioni di un logcat lì per vedere quale è l'URI che stai cercando di risolvere e pubblicarlo qui? Log.i ("URI", thumbnailUri); – RyanInBinary

+0

contenuto: //com.android.contacts/contacts/1/photo, che ritengo sia corretto. Forse è solo perché sto usando un emulatore. Devo ottenere un dispositivo reale:/ –

+1

Mi sono appena procurato un vero dispositivo. Funziona, il mio codice va bene. –

risposta

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

Questa è la funzione in cui è necessario passare Contact ID e si otterrà l'URI dell'immagine che è possibile impostare facilmente nel ImageView.

uso l'URI risposta di questa funzione come imageView.setImageURI (URI)

Spero che funzionerà per il vostro codice.

+0

Provato questo, e restituisce lo stesso Uri di quello che stavo già ricevendo (contenuto: //com.android.contacts/contacts/1/photo) sfortunatamente. Sto ancora ricevendo lo stesso messaggio di errore. –

+0

c'è due id di contatto è lì. uno è id di contatto e l'altro è id di contatto non elaborato, quindi quale ID viene fornito per funzionare? Potrebbe essere un problema con id e quindi non è possibile ottenere l'Uri. –

+0

Prova anche questo: 'String stringUri = imageUri.getPath(); // works' 'String stringUri = imageUri.toString(); // non funziona' 'i.setImageURI (Uri.parse (stringUri));' potrebbe essere adatto a te. perché nella mia funzione di codice funziona correttamente. –

Problemi correlati