2012-08-08 11 views
11

Mam adapter listview i próbuję następujące w metodzie newView:Jak zdobyć Android Kontakt miniatur

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

Ale gdy próbuję analizować URI, który jest przechowywany w thumbnailUri, ja otrzymać następujący błąd:

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

Czy podążam tą drogą w niewłaściwy sposób? Każda pomoc będzie bardzo ceniona!

+0

Czy umieścisz tam informacje o logcat, aby sprawdzić, jaki identyfikator URI, który próbujesz rozwiązać, i opublikować go tutaj? Log.i ("URI", thumbnailUri); – RyanInBinary

+0

treść: //com.android.contacts/contacts/1/photo, co według mnie jest poprawne. Może to dlatego, że używam emulatora. Potrzebuję prawdziwego urządzenia:/ –

+1

Właśnie dostałem swoje prawdziwe urządzenie. To działa, mój kod jest w porządku. –

Odpowiedz

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

Jest to funkcja, w której należy podać identyfikator kontaktu, a otrzymasz identyfikator URI obrazu, który można łatwo ustawić w widoku obrazu.

użycie URI odpowiedź tej funkcji jak imageView.setImageURI (URI)

nadzieję, że będzie działać na kodzie.

+0

Wypróbowałem to i zwracało to samo Uri, co niestety otrzymałem (treść: //com.android.contacts/contacts/1/photo). Nadal otrzymuję ten sam komunikat o błędzie. –

+0

jest tam dwa identyfikatory kontaktu. jeden jest identyfikatorem kontaktowym, a inny jest identyfikatorem kontaktowym typu raw, a więc którego identyfikatora należy podać do funkcji? Może to być problem z identyfikatorem, a tym samym nie uzyskiwanie URI. –

+0

Próbowano również: 'String stringUri = imageUri.getPath(); // działa ' ' String stringUri = imageUri.toString(); // nie działa ' ' i.setImageURI (Uri.parse (stringUri)); ' to może działać dla ciebie. ponieważ w mojej funkcji kodu działa poprawnie. –

Powiązane problemy