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();
       }
   }
}