2013-06-08 2 views
0

저는 전화의 연락처 목록을 이름과 사진으로 보여주는 활동을 만들고 있습니다. ListAdapter와 함께 Cursor와 Managedquery를 사용하여 모든 것을 레이아웃에 적용합니다.ListAdapter를 사용하여 BitmapFactory FileNotFoundException을 제어하는 ​​방법

괜찮 았지만 Logcat에서 그림이없는 사용자와 관련된 오류가 표시되고이를 제어하고 싶고 안드로이드 기본 사진 아이콘이 보이지 않지만 길을 찾지 못했습니다. 해.

Example of the contact list generated

블루 블러 이름이다 : 여기

는 일례이다. 자신의 정체성을 유지하기 위해 숨겨진 : 여기

P

것 코드 :

Contactos.java는

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_contactos); 

     //Llamamos función para conseguir todos los contactos. 
     Cursor cursor = getContacts(); 
     startManagingCursor(cursor); 
     // Llenamos la ListView con los contactos del teléfono 
     try { 
      ListAdapter infoContacto = new SimpleCursorAdapter(this,R.layout.contacto, 
        cursor,new String[] {ContactsContract.Contacts.PHOTO_THUMBNAIL_URI,ContactsContract.Contacts.DISPLAY_NAME}, 
        new int[] {R.id.foto, R.id.nombreContacto}, 0); 
      setListAdapter(infoContacto); 
     }catch(Exception e){ 
      Log.d("Excepcion",e.toString()); 
     } 

    } 
private Cursor getContacts() { 
      Uri contacto = ContactsContract.Contacts.CONTENT_URI; 
      /* Seleccionamos la información que necesitamos. ID SIEMPRE NECESARIO. */ 
      String[] projection = new String[] {ContactsContract.Contacts._ID,ContactsContract.Contacts.PHOTO_THUMBNAIL_URI,ContactsContract.Contacts.DISPLAY_NAME}; 
      /* Los ordenamos por nombre */ 
      String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP; 
      String[] selectionArgs = null; 
      String ordenarPorNombre = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; 
      /* Devolvemos los contactos */ 
      return managedQuery(contacto, projection, selection, selectionArgs, 
        ordenarPorNombre); 
    } 

로그 캣

06-08 23:50:41.429: E/BitmapFactory(20808): Unable to decode stream: java.io.FileNotFoundException: /: open failed: EISDIR (Is a directory) 
06-08 23:50:41.429: I/System.out(20808): resolveUri failed on bad bitmap uri: 
06-08 23:50:41.439: E/BitmapFactory(20808): Unable to decode stream: java.io.FileNotFoundException: /: open failed: EISDIR (Is a directory) 
06-08 23:50:41.439: I/System.out(20808): resolveUri failed on bad bitmap uri: 
06-08 23:50:41.469: E/BitmapFactory(20808): Unable to decode stream: java.io.FileNotFoundException: /: open failed: EISDIR (Is a directory) 
06-08 23:50:41.469: I/System.out(20808): resolveUri failed on bad bitmap uri: 
06-08 23:50:41.479: E/BitmapFactory(20808): Unable to decode stream: java.io.FileNotFoundException: /: open failed: EISDIR (Is a directory) 

나는 경우를 놓아야합니다 생각 성명서 어딘가에 투영 defi 전에 if가 올바른 URI인지 파일인지, 디렉토리가 아닌지, 어디에서 어떻게 확인 하는가?

마지막 질문은 현재의 방법을 사용하거나 getContentResolver()로 바꾸는 것이 더 나은지 질문입니다 (blablabla ...) ??

감사합니다.

답변

0

휴대 전화에없는 연락처 사진을 지정하려면 setViewBinder() 방법이 SimpleCursorAdapter이어야하며 이미지가 null인지 확인한 다음 기본 사진 없음 이미지를 배치하십시오 (Android 시스템 리소스에서만 찾을 수있는 이미지) android.R.drawable.ic_contact_picture이 당신의 마지막 질문에 대해서는

enter image description here

) 다음과 같다, 나는 (당신의 코드가 이미 작동하고) 큰 차이를하지 것이라 생각합니다. 하지만 연락처 데이터를 편집하려면 ContentResolver을 사용해야합니다.

+0

많은 감사의 인사! 그것은 내가 접촉 이미지를 제어하기 위해 찾고 있던 것이 었습니다. – arkanos

+0

당신은 대환영입니다. –

관련 문제