1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Kontaktbild in ImageView anzeigen [gelöst]

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von onip, 16.07.2012.

  1. onip, 16.07.2012 #1
    onip

    onip Threadstarter Neuer Benutzer

    Beiträge:
    24
    Erhaltene Danke:
    7
    Registriert seit:
    02.07.2012
    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
    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: 16.07.2012

Diese Seite empfehlen