Kontaktbild in ImageView anzeigen [gelöst]

onip

onip

Neues Mitglied
10
hallo zusammen,

ich hänge gerade an der darstellung eines bildes in einem imageview.
ich gehe die kontakte durch und möchte das kontaktbild mit anzeigen.
mein aufbau für meine listview sieht so aus:
Code:
String rowId = "306";
String rowName = "display_name";
String rowHasPhone = "has_phone_nr";

Cursor pCur = getContentResolver()
        .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                new String[] { Phone.NUMBER, Phone.TYPE,
                        Phone.PHOTO_ID },
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                        + " = ?", new String[] { rowId }, null);
pCur.moveToNext();

int rowType = pCur.getInt(pCur
        .getColumnIndex(Phone.TYPE));
String rowMobile = pCur.getString(pCur
        .getColumnIndex(Phone.NUMBER));
Uri uri = ContentUris.withAppendedId(
        ContactsContract.Contacts.CONTENT_URI,
        pCur.getLong(_id));
String rowPhotoId = pCur.getString(pCur
        .getColumnIndex(Phone.PHOTO_ID));
InputStream is = ContactsContract.Contacts
        .openContactPhotoInputStream(this.getContentResolver(), uri);

if (rowPhotoId != null && rowType == Phone.TYPE_MOBILE) {
    String imgPath = String.valueOf(uri + "/" + rowPhotoId);

    ItemDetails item_details = new ItemDetails();
    item_details.setName(rowName);
    item_details.setItemDescription("ID: " + rowId);
    item_details.setPrice(imgPath);
    item_details.setImagePath(imgPath);
    listAr.add(item_details);
    Log.d(appNam, imgPath);
}
ich hab CONTENT_URI und PHOTO_ID daraus mach ich ein string um mir das in der view anzuzeigen.
Code:
uri = "content://com.android.contacts/contacts/49";
rowPhotoId = "1928";
String imgPath = String.valueOf(uri + "/" + rowPhotoId);
somit ist mir der pfad zum bild bekannt
content://com.android.contacts/contacts/49/1928
leider weiß ich noch nicht genau wie man bilder lädt und bräuchte etwas hilfe.

meine getView methode bekommt die item_details und verarbeitet diese
Code:
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = l_Inflater.inflate(R.layout.list_view_image_text, null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView) convertView
                .findViewById(R.id.name);
        holder.txt_itemDescription = (TextView) convertView
                .findViewById(R.id.cityState);
        holder.txt_itemPrice = (TextView) convertView
                .findViewById(R.id.phone);
        holder.itemImage = (ImageView) convertView.findViewById(R.id.photo);

        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    holder.txt_itemName
            .setText(itemDetailsrrayList.get(position).getName());
    holder.txt_itemDescription.setText(itemDetailsrrayList.get(position)
            .getItemDescription());
    holder.txt_itemPrice.setText(itemDetailsrrayList.get(position)
            .getPrice());
    
    // setImageURI macht ne uri daraus
    holder.itemImage.setImageURI(itemDetailsrrayList.get(position).getImagePathUri());

    return convertView;
}
// fehler
resolveUri failed on bad bitmap uri: content://com.android.contact/contacts/49/1928

was fang ich mit dem pfad an und stell es in einem imageview dar?
oder kann ich mit
Code:
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(this.getContentResolver(), uri);
schon was anfangen?

// edit
ok hab was gefunden.
lese die bilder so ein:
Code:
Uri photoUri = ContentUris.withAppendedId(ContactsContract.Data.CONTENT_URI, Long.valueOf(rowPhotoId));
Cursor c = this.getContentResolver().query(photoUri, new String[] {ContactsContract.CommonDataKinds.Photo.PHOTO}, null, null, null);
try 
   {
       if (c.moveToFirst()) 
           photoBytes = c.getBlob(0);

   } catch (Exception e) {
       e.printStackTrace();

   } finally {
       c.close();
   }
das übergebe ich meiner Liste und stell es dann so dar:
Code:
byte[] bytes = itemDetailsrrayList.get(position).getImageBytes();
if (bytes != null){
holder.itemImage.setImageBitmap(itemDetailsrrayList.get(position).getImageBitmap());
}else {
    holder.itemImage.setImageResource(R.drawable.blank_contact);
}
 
Zuletzt bearbeitet:

Ähnliche Themen

D
  • Data2006
3 4 5
Antworten
84
Aufrufe
3.703
jogimuc
J
D
Antworten
23
Aufrufe
2.542
Data2006
D
softwaretk
Antworten
3
Aufrufe
1.203
swa00
swa00
Zurück
Oben Unten