Android 如何使用ListAdapter控制BitmapFactory FileNotFoundException

Android 如何使用ListAdapter控制BitmapFactory FileNotFoundException,android,image,contacts,listadapter,filenotfoundexception,Android,Image,Contacts,Listadapter,Filenotfoundexception,我正在做一个活动,通过他们的姓名和照片显示手机的联系人列表。我使用一个游标和一个带有ListAdapter的Managedquery来调整布局 它工作得很好,但我在Logcat中看到了一个与那些没有图片的人相关的错误,我想控制他们,显示android默认的无照片图标,但我还没有找到一种方法 以下是一个例子: 蓝色的模糊是名字。隐藏以保留他们的身份:P 代码如下: Contactos.java protected void onCreate(Bundle savedInstanceState)

我正在做一个活动,通过他们的姓名和照片显示手机的联系人列表。我使用一个游标和一个带有ListAdapter的Managedquery来调整布局

它工作得很好,但我在Logcat中看到了一个与那些没有图片的人相关的错误,我想控制他们,显示android默认的无照片图标,但我还没有找到一种方法

以下是一个例子:

蓝色的模糊是名字。隐藏以保留他们的身份: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

我想我应该在投影定义之前的某个地方放一个if语句,以检查是否是有效的URI或文件而不是目录,但是如何以及在哪里

最后一个问题,我应该使用当前方法还是最好将其更改为getContentResolver().query(blabla…)


谢谢您的时间。

要为手机上没有联系人的联系人指定联系人图像,您需要使用
SimpleCorsorAdapter
setViewBinder()
方法,检查图像是否为空,然后放置默认的无照片图像(我在Android系统资源中能找到的唯一图像是
Android.R.drawable.ic\u contact\u图片
,如下所示)


关于你的最后一个问题,我认为这没有多大区别(你的代码已经在运行)。但是如果你要编辑联系人数据,我认为你必须使用
ContentResolver

非常感谢,伙计!这就是我想要控制联系人图像的原因。
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)