Android: setImageUri 失败
Android: setImageUri failing
我的应用程序有一个插入 activity,它有一个图像选择器,其中的 Uri 被存储为一个字符串,准备放入数据库。
public void onActivityResult(int reqCode, int resCode, Intent data) {
if(resCode == RESULT_OK) {
if(reqCode == 1) {
imageUri = data.getData().toString();
}
}
}
imageUri 是随后在按下按钮时放入数据库的字符串。
将所有内容插入数据库后,activity 完成 return 主要 activity,在 onResume
方法中,所有数据来自 database/table 在对象列表中检索,然后将这些对象放入自定义数组适配器以形成我的列表视图。
if(!uriString.equals("")) {
image.setImageURI(Uri.parse(uriString));
}
这是图像在数组适配器中的设置方式。奇怪的是,在插入 activity 关闭后图像是可见的,但是一旦我打开另一个 activity 和 return 图像是空白的。我收到错误
resolveUri failed on bad bitmap uri: content://com.android.providers.media.documents/document/image%3A29938
我不知道为什么不能解决,因为开始可以,但后来就不行了。
内容 URI 需要正确解析,因为它们不像普通的文件路径,因此我们需要一些解析器。这是一个如何解决这个问题的例子:
代码更改
if(!uriString.equals("")) {
image.setImageURI(Uri.parse(getPathFromURI(<your app context>, Uri.parse("content://blah/blah/blah"))));
}
URI 解析器的方法定义。
public String getPathFromURI(Context context, Uri contentUri) {
Cursor mediaCursor = null;
try {
String[] dataPath = { MediaStore.Images.Media.DATA };
mediaCursor = context.getContentResolver().query(contentUri, dataPath, null, null, null);
int column_index = mediaCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
mediaCursor.moveToFirst();
return mediaCursor.getString(column_index);
} finally {
if (mediaCursor != null) {
mediaCursor.close();
}
}
}
我的应用程序有一个插入 activity,它有一个图像选择器,其中的 Uri 被存储为一个字符串,准备放入数据库。
public void onActivityResult(int reqCode, int resCode, Intent data) {
if(resCode == RESULT_OK) {
if(reqCode == 1) {
imageUri = data.getData().toString();
}
}
}
imageUri 是随后在按下按钮时放入数据库的字符串。
将所有内容插入数据库后,activity 完成 return 主要 activity,在 onResume
方法中,所有数据来自 database/table 在对象列表中检索,然后将这些对象放入自定义数组适配器以形成我的列表视图。
if(!uriString.equals("")) {
image.setImageURI(Uri.parse(uriString));
}
这是图像在数组适配器中的设置方式。奇怪的是,在插入 activity 关闭后图像是可见的,但是一旦我打开另一个 activity 和 return 图像是空白的。我收到错误
resolveUri failed on bad bitmap uri: content://com.android.providers.media.documents/document/image%3A29938
我不知道为什么不能解决,因为开始可以,但后来就不行了。
内容 URI 需要正确解析,因为它们不像普通的文件路径,因此我们需要一些解析器。这是一个如何解决这个问题的例子:
代码更改
if(!uriString.equals("")) {
image.setImageURI(Uri.parse(getPathFromURI(<your app context>, Uri.parse("content://blah/blah/blah"))));
}
URI 解析器的方法定义。
public String getPathFromURI(Context context, Uri contentUri) {
Cursor mediaCursor = null;
try {
String[] dataPath = { MediaStore.Images.Media.DATA };
mediaCursor = context.getContentResolver().query(contentUri, dataPath, null, null, null);
int column_index = mediaCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
mediaCursor.moveToFirst();
return mediaCursor.getString(column_index);
} finally {
if (mediaCursor != null) {
mediaCursor.close();
}
}
}