0

我正在做一个活动,我通过他们的姓名和照片显示手机的联系人列表。我使用 Cursor 和带有 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);
     }

日志猫

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)

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

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

谢谢你的时间。

4

1 回答 1

0

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

在此处输入图像描述

关于你的最后一个问题,我认为它不会有太大的不同(你的代码已经在工作)。但是,如果您要编辑联系人数据,我认为您将不得不使用ContentResolver.

于 2013-06-09T14:42:23.863 回答