我正在建立自己的联系人选择器,因为我需要多选支持.一切都正常,除了联系人图像的一个小问题.
对于没有图像的联系人,我显示“无图像”图像.这对于手机通讯录中的联系人来说是非常正常的.不过,当涉及到我的谷歌联系人的图像时,我有一个问题.
我的大多数Google联系人都没有照片.但是,当我查询联系人数据库中的照片时,它仍然返回一个URI形式的内容://com.android.contacts/contacts/657/photo(其格式与联系人有一样的照片.
然后当我尝试将照片分配给QuickContactBadge时,使用bdg.setImageURI(pic);它将其设置为基本上为空白的图片,并记录一个静音INFO消息,指出:
INFO/System.out(3968): resolveUri Failed on bad bitmap uri: content://com.android.contacts/contacts/657/photo
我需要知道我也可以
a)验证URI或
b)抓住上面的INFO消息
c)查询imageview /徽章,查看是否找到有效的图像
所以我可以将这些联系人分配给我的“无图像”图像.
我该怎么做呢?
编辑20110812.0044
我已经尝试根据劳伦斯的建议(他已被删除)将其添加到我的代码中:
// rv is my URI variable if(rv != null) { Drawable d = Drawable.createFromPath(rv.toString()); if (d == null) rv = null; }
而谷歌联系人现在得到了我的“没有图像”图像,所以其他所有联系人,包括其实有图像的联系人.
解决方法
好的,我想到了如何通过ImageView源代码进行处理.它实际上是使用QuickContactBadge自己的方法,但如有必要,可以随时提取
the relevant code from the Badge/ImageView control here.
在设置QCB的图像后,我检查它的drawable是否为null,而不是尝试我自己的(根据Laurence的建议).这样做效果更好,因为ImageView小部件实际上使用了一整套检查代码.
这是我的最终代码:
bdg.setImageURI(pic); if(bdg.getDrawable() == null) bdg.setImageResource(R.drawable.contactg);
这是完美的,因为我希望和期待.