2012-08-08 53 views
11

我有一個listview適配器和我想的newView方法如下:如何獲得Android的聯繫縮略圖

@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

你可以在那裏放一個logcat信息來看看你想要解析的URI是什麼,並在這裏發佈? Log.i(「URI」,thumbnailUri); – RyanInBinary 2012-08-08 14:18:02

+0

內容://com.android.contacts/contacts/1/photo,我相信這是正確的。也許這只是因爲我在使用模擬器。我需要一個真正的設備:/ – 2012-08-09 07:47:26

+1

只需要一個真正的設備。這工作,我的代碼是好的。 – 2012-08-09 10:53:18

回答

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

這就是你需要通過接觸式ID的功能,你會得到你可以在imageview的輕鬆設定圖像的URI。

使用像imageView.setImageURI(URI)這個函數的響應URI

希望它會爲你的代碼工作。

+0

試過這個,不幸的是它返回的是和我已經獲得的相同的Uri(con​​tent://com.android.contacts/contacts/1/photo)。我仍然收到相同的錯誤訊息。 – 2012-08-09 07:48:59

+0

有兩個id的聯繫人在那裏。 一個是聯繫人ID和其他是原始聯繫人ID,所以你提供的ID的功能?它可能是問題的ID,所以它沒有得到Uri。 – 2012-08-09 08:54:26

+0

也試過這個: 'String stringUri = imageUri.getPath(); //作品' 'String stringUri = imageUri.toString(); //不行' 'i.setImageURI(Uri.parse(stringUri));' 它可能適合你。因爲在我的代碼功能正常工作。 – 2012-08-09 08:58:06