2013-06-08 2 views
0

Я занимаюсь деятельностью, где я показываю список контактов телефона по их именам и их фотографиям. Я использую курсор и Managedquery с ListAdapter, чтобы адаптировать все к макету.Как контролировать BitmapFactory FileNotFoundException с помощью ListAdapter

Это работает хорошо, но я вижу в Logcat ошибку, связанную с теми, у кого нет изображения, и я бы хотел их контролировать, показывая значок андроида по умолчанию, но я не нашел способ сделай это.

Вот пример:

Example of the contact list generated

Синий размытие имена. Hidden сохранить свою идентичность: 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); 
    } 

Logcat

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 чтобы проверить, является ли допустимым URI или файлом, а не каталогом, но как и где?

И последний вопрос, следует ли использовать текущий метод или лучше изменить его на getContentResolver(). Query (blablabla ...) ??

Спасибо за ваше время.

ответ

0

Чтобы указать контактный образ для тех, у кого его нет, вам нужно будет setViewBinder() метод вашего SimpleCursorAdapter и проверить, не является ли изображение нулевым, а затем поместить по умолчанию изображение без фото (только изображение, которое я могу найти в системных ресурсах Android как android.R.drawable.ic_contact_picture показано ниже)

enter image description here

что касается последнего вопроса, то я думаю, что это не имеет большого значения (ваш код уже работает). Но если вы отредактируете контактные данные, я думаю, вам придется использовать ContentResolver.

+0

Большое спасибо помощнику! Это то, что я искал для управления контактными изображениями. – arkanos

+0

Вы больше всего приветствуетесь –

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