2012-08-08 31 views
11

Tôi có một bộ chuyển đổi listview và tôi đang cố gắng sau trong newView phương pháp:Làm thế nào để có được Android Liên 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; 
    } 

Nhưng khi tôi cố gắng phân tích Uri được lưu trữ trong thumbnailUri, tôi nhận được lỗi sau:

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

Tôi có làm theo cách này sai không? Mọi sự trợ giúp sẽ rất được trân trọng!

+0

Bạn có thể đặt thông tin nhật ký trong đó để xem URI mà bạn đang cố giải quyết là gì và đăng nó ở đây không? Log.i ("URI", thumbnailUri); – RyanInBinary

+0

nội dung: //com.android.contacts/contacts/1/photo, mà tôi tin là chính xác. Có lẽ chỉ vì tôi đang sử dụng trình mô phỏng. Tôi cần có một thiết bị thực sự:/ –

+1

Chỉ cần có một thiết bị thực. Điều này làm việc, mã của tôi là tốt. –

Trả lời

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

Đây là chức năng bạn cần chuyển id liên hệ và bạn sẽ nhận được URI của hình ảnh mà bạn có thể đặt dễ dàng trong lần xem.

sử dụng các uri phản ứng của chức năng này như imageView.setImageURI (uri)

Hy vọng nó sẽ làm việc cho mã của bạn.

+0

Thử nghiệm điều này, và nó trả về cùng một Uri như tôi đã nhận được (nội dung: //com.android.contacts/contacts/1/photo) không may. Tôi vẫn nhận được thông báo lỗi tương tự. –

+0

có hai id liên hệ ở đó. một là id liên hệ và khác là id liên hệ thô để id nào bạn cung cấp để hoạt động? Nó có thể là vấn đề với id và vì vậy nó không nhận được Uri. –

+0

Cũng đã thử điều này: 'Chuỗi stringUri = imageUri.getPath(); // works' 'Chuỗi stringUri = imageUri.toString(); // không hoạt động ' 'i.setImageURI (Uri.parse (stringUri));' nó có thể phù hợp với bạn. bởi vì trong chức năng mã của tôi hoạt động chính xác. –

Các vấn đề liên quan