【发布时间】:2014-11-25 09:24:16
【问题描述】:
我只是使用通用图像加载器在列表视图上显示联系人图像。我只是得到这样的照片 uri。
public String getPhotoUri(String contactId) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactId);
return uri + "";
}
并像这样在列表视图中显示:
ImageLoader.getInstance().displayImage(getPhotoUri(item.getContactId()), holder.ivHead);
效果很好。但我的问题是当联系人没有图像时。我会在下面得到错误:
java.lang.NullPointerException
at com.nostra13.universalimageloader.utils.IoUtils.copyStream(IoUtils.java:69)
at com.nostra13.universalimageloader.cache.disc.impl.BaseDiscCache.save(BaseDiscCache.java:109)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.downloadImage(LoadAndDisplayImageTask.java:291)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryCacheImageOnDisk(LoadAndDisplayImageTask.java:273)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:229)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:135)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
at java.lang.Thread.run(Thread.java:841)
它不会崩溃。我可以在 image-univeral-loader 上使用 showImageOnFail 方法来显示默认图像。但我讨厌 NPE 。当我滚动时,几乎所有的日志都是 NPE。 所以我只想知道如何检查联系人是否有图像。我试着用这种方式
public String getPhotoUri(String contactId) {
Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(contactId));
InputStream is = ContactsContract.Contacts.openContactPhotoInputStream(mContext.getContentResolver(),uri);
if (null !=is){
return uri+"";
}else {
//TODO
}
return uri + "";
}
但是 ContactsContract.Contacts.openContactPhotoInputStream 只是对系统联系人数据库进行联系人查询。所以如果我想显示所有的联系人照片。它会查询很多次。那么有什么好的方法来检查联系人是否有图像吗?
【问题讨论】:
-
你想通过通用加载简单地显示图像吗?对吗?