Android:setImageUri失败

时间:2016-08-16 15:27:31

标签: android listview uri

我的应用程序有一个插入活动,它有一个图像选择器,其中的Uri存储为一个准备放入数据库的字符串。

<login-config>

imageUri是一个字符串,然后在按下按钮后放入数据库中。

一旦所有内容都插入到数据库中,活动就会返回主活动,在public void onActivityResult(int reqCode, int resCode, Intent data) { if(resCode == RESULT_OK) { if(reqCode == 1) { imageUri = data.getData().toString(); } } } 方法中,在对象列表中检索数据库/表中的所有数据,然后将这些数据放入自定义数组中适配器以形成我的列表视图。

onResume

这是在数组适配器中设置图像的方式。奇怪的是,在插入活动关闭后,图像立即可见,但只要我打开另一个活动并返回图像就是空白。我收到了错误

if(!uriString.equals("")) {
     image.setImageURI(Uri.parse(uriString));
}

我不知道为什么它无法解决,因为它可以开始,但它不起作用。

1 个答案:

答案 0 :(得分:0)

内容URI需要正确解析,因为它们不像普通的filePath,因此我们需要一些解析器。以下是如何解决此问题的示例:

对代码的更改

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