2012-08-08 7 views
11

Ich habe einen listview Adapter und ich versuche, die folgenden in der newView Methode:Wie Android Kontakt bekommen thumbnail

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

Aber wenn ich versuche, die Uri zu analysieren, die in thumbnailUri gespeichert ist, erhalte ich die folgender Fehler:

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

Gehe ich das falsch herum? Jede Hilfe würde sehr geschätzt werden!

+0

Können Sie eine logcat info setzen dort zu sehen, was die URI, die Sie versuchen, es hier zu lösen und posten? Log.i ("URI", thumbnailUri); – RyanInBinary

+0

Inhalt: //com.android.contacts/contacts/1/photo, was ich für richtig halte. Vielleicht liegt es nur daran, dass ich einen Emulator verwende. Ich brauche ein echtes Gerät:/ –

+1

Habe mir gerade ein richtiges Gerät besorgt. Das funktioniert, mein Code ist in Ordnung. –

Antwort

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

Dies ist die Funktion, wo Sie müssen Kontakt-ID passieren und Sie werden die URI des Bildes erhalten, die Sie leicht in der Imageview festlegen.

Verwendung der Antwort uri dieser Funktion wie imageView.setImageURI (uri)

Hoffe, es wird für Ihren Code zu arbeiten.

+0

dies versucht, und es gibt die gleiche Uri wie die, die ich bereits bekommen (Inhalt: //com.android.contacts/contacts/1/photo) leider. Ich erhalte immer noch dieselbe Fehlermeldung. –

+0

gibt es zwei ID von Kontakt ist da. ist Kontakt-ID und andere roher Kontakt-ID so der ID Sie funktionieren werden liefern? Es könnte sein Problem mit der ID und so ist es nicht die Uri bekommen. –

+0

auch versucht, dies: 'String stringUri = imageUri.getPath(); // funktioniert' 'String stringUri = imageUri.toString(); // nicht Werk' nicht 'i.setImageURI (Uri.parse (stringUri));' es funktioniert für Sie sein kann. weil in meiner Code-Funktion richtig funktioniert. –

Verwandte Themen