2012-01-23 3 views
1

Я не могу получить фотографию из контактов и поместить ее в представление списка, я организую это в HashMap. Когда у некоторых контактов нет фотографии, я хочу отображать фотографию по умолчанию. Я не получаю фото прямо сейчас.Получение фотографии контакта?

Вот мой код:

cOznaci = (ImageView) findViewById(R.id.cbOznaci);  
ArrayList<HashMap<String, Object>> mapa = new ArrayList<HashMap<String, Object>>();  
ContentResolver cr = getContentResolver(); 
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

     if(cur.getCount() > 0){ 
      while(cur.moveToNext()){ 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       long id2 = Long.parseLong(id); 
       Object slika = loadContactPhoto(cr, id2); 
       if(Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0){ 

        final Cursor numCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{id}, null); 

        for(numCur.moveToFirst(); !numCur.isAfterLast(); numCur.moveToNext()){ 

         brTel = numCur.getString(numCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         ime = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 

         tmpIme = new String[] {ime}; 

         for(int i = 0; i < tmpIme.length; i++){ 

          HashMap<String, Object> imeMapa = new HashMap<String, Object>(); 
          imeMapa.put("imeLista", ime); 
          imeMapa.put("checkBox", slika); 
          imeMapa.put("Mobilni", brTel); 
          mapa.add(imeMapa); 
         } 

        } 
        numCur.close(); 

       } // End if 

      } // While 
     } 

     SimpleAdapter sa = new SimpleAdapter(getApplicationContext(), mapa, R.layout.imenik, new String[] {"imeLista", "checkBox", "Mobilni"}, new int[] {R.id.tvImeImenik, R.id.cbOznaci, R.id.tvSamoProba}); 
     lImenik.setAdapter(sa); 

      } 
     }); 

    } // onCreate 

    public static Bitmap loadContactPhoto(ContentResolver cr, long id) { 
     Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, id); 
     InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri); 
     if (input == null) { 
      return null; 

     } 
     return BitmapFactory.decodeStream(input); 
     } 

ответ

0

Вы не можете назначить Bitmaps на ImageViews через SimpleAdapter, как это, вы можете назначить только автоматически со строками и целыми числами. Для выполнения более сложных заданий вам необходимо создать ViewBinder.

Однако я предлагаю не с использованием этого уровня-14 API и вместо этого использовать PHOTO_URI. Это String и SimpleAdapter по умолчанию ViewBinder должны поступать правильно.

+0

Можете ли вы показать мне, как? – Wolf87

+0

В вашем цикле «while» выберите URI с фотографией через «String photoUri = cur.getString (cur.getColumnIndex (ContactsContract.Contacts.PHOTO_URI));». Затем вам не нужно вызывать loadContactPhoto() и передать это вместо вашего растра. –

Смежные вопросы