我从我的手机通讯录列表中获取了我的联系人图像。
但是,当我尝试将图像uri转换为位图时,我收到错误:
java.io.FileNotFoundException: content://com.android.contacts/contacts/24093/photo
它与我的设备上的旧照片有关,就像我拍了一张新照片一样,显示确定。
所以也许旧照片太大或不太好,但例外情况java.io.FileNotFoundException
如何验证它是否存在访问权限问题?
final Bitmap bitmap;
try {
bitmap = MediaStore.Images.Media.getBitmap(ab.getContentResolver(), tryUri);
ab.runOnUiThread(new Runnable() {
@Override
public void run() {
// make sure the tag is still the one we set at the beginning of this function
if (toSet.getTag() == urlStr) {
toSet.setImageBitmap(bitmap);
}
}
});
} catch (FileNotFoundException e) {
String a = "1";
} catch (IOException e) {
String a = "1";
} catch (Exception e) {
String a = "1";
}
答案 0 :(得分:0)
两种可能性:1)你使用的uri不再好了。您可以使用ContactsContract重新生成一个新的。 2)您正在拉动的联系人24093可能已不存在或已合并到另一个联系人中。因此,不再有主要联系人照片。
使用ContactsContract而不是getBitmap尝试此操作。如果照片不存在而不是FileNotFound错误,则最终会返回null:
private void showPic(String photoUri) {
Bitmap[] array = new Bitmap[2];
Cursor cursor = getContentResolver().query(Uri.parse(photoUri),
new String[] {ContactsContract.Contacts.Photo.PHOTO}, null, null, null);
try {
if (cursor.moveToFirst()) {
byte[] data = cursor.getBlob(0);
if (data != null) {
array[0] = BitmapFactory.decodeStream(new ByteArrayInputStream(data));
}
}
} finally {
cursor.close();
}
if (array[0] != null) {toSet.setImageBitmap(array[0]);}
}