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