2012-01-23 4 views
1

연락처에서 사진을 가져 와서 목록보기에 넣을 수 없습니다.이를 HashMap에서 구성합니다. 일부 연락처에 사진이 없으면 기본 사진을 표시하려고합니다. 지금 당장 사진이 보이지 않습니다.연락처 사진 검색 중?

여기 내 코드입니다 : 당신은 그런 SimpleAdapter를 통해 ImageViews에 비트 맵을 할당 할 수 없습니다

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

, 당신은 단지 문자열과 정수 자동으로 할당 할 수 있습니다. 보다 복잡한 과제를 수행하려면 ViewBinder을 만들어야합니다.

그러나 Level-14 API를 사용하는 이 아니고이 아니고 PHOTO_URI를 사용하는 것이 좋습니다. 그것은 String이고 SimpleAdapter의 기본 ViewBinder는 올바른 작업을 수행해야합니다.

+0

어떻게 표시 할 수 있습니까? – Wolf87

+0

'while'루프에서 'String photoUri = cur.getString (cur.getColumnIndex (ContactsContract.Contacts.PHOTO_URI));'을 통해 사진 URI를 가져옵니다. 그런 다음 loadContactPhoto()를 호출 할 필요가 없으며 비트 맵 대신 SimpleAdapter에 전달할 수 있습니다. –

관련 문제