2012-08-08 27 views
11

que tienen un adaptador listview y estoy tratando lo siguiente en el método de newView:Como llegar Contacto Android miniatura

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

Pero cuando trato de analizar el URI que se almacena en thumbnailUri, recibo el siguiente error:

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

Am I ir sobre esto por el camino equivocado? ¡Cualquier ayuda sería muy apreciada!

+0

¿Puede poner una información de logcat allí para ver qué URI está tratando de resolver y publicarlo aquí? Log.i ("URI", thumbnailUri); – RyanInBinary

+0

contenido: //com.android.contacts/contacts/1/photo, que creo que es correcto. Quizás es solo porque estoy usando un emulador. Necesito obtener un dispositivo real:/ –

+1

Acabo de comprarme un dispositivo real. Esto funciona, mi código está bien. –

Respuesta

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

Esta es la función donde se necesita pasar Identificación del contacto y obtendrá el URI de la imagen que se puede configurar fácilmente en el imageview.

usar el URI de respuesta de esta función como imageView.setImageURI (URI)

Esperamos que se puede trabajar por su código.

+0

Intenté esto, y devuelve el mismo Uri como el que ya estaba obteniendo (content: //com.android.contacts/contacts/1/photo) desafortunadamente. Todavía estoy recibiendo el mismo mensaje de error. –

+0

hay dos identificadores de contacto. uno es identificación de contacto y el otro es identificación de contacto sin procesar, por lo que ¿qué id se le proporciona para funcionar? Podría ser un problema con el ID y por lo tanto no está obteniendo el URI. –

+0

También intenté esto: 'String stringUri = imageUri.getPath(); // works' 'String stringUri = imageUri.toString(); // no funciona' 'i.setImageURI (Uri.parse (stringUri));' puede ser que funcione para usted. porque en mi función de código funciona correctamente. –

Cuestiones relacionadas