无法在共享首选项中从已保存的URI加载图像

时间:2017-02-01 10:04:43

标签: android android-intent bitmap uri

我让用户选择一张图片,并将我从此操作中收到的URI保存在我的共享偏好设置中。此URI在不同的活动中再次使用。这种情况适用于用户选择图像并保存URI的一次,但是当应用程序关闭并再次打开时,程序会在活动尝试加载保存在共享首选项中的URI图像时崩溃。为什么会发生这种情况,为什么第一次选择图像时它会起作用?

在这里,我让用户选择一个图像并保存收到的URI:

public void pickImage(View view) {
        Intent pickIntent = new Intent();
        pickIntent.setType("image/*");
        pickIntent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(pickIntent, 1);
    }

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode != RESULT_OK) {
        return;
    }
    if (requestCode == 1) {
        Uri uri = data.getData();
        SharedPreferences prefs = this.getSharedPreferences(PREFS, MODE_PRIVATE);
        SharedPreferences.Editor edit = prefs.edit();
        edit.clear();
        edit.putString(URI, uri.toString());
        edit.commit();
        }
    }

在这里我再次加载保存在URI中的图像:

   private void setImage() {
        SharedPreferences prefs = this.getSharedPreferences(MainActivity.PREFS, MODE_PRIVATE);
        String string_uri = prefs.getString(MainActivity.URI, "not found");

        Uri uri = Uri.parse(string_uri);
        InputStream inputStream = null;
        try {
            inputStream = getContentResolver().openInputStream(uri);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

        Bitmap bmp = BitmapFactory.decodeStream(inputStream);
        ImageView iv = (ImageView) findViewById(R.id.imageView_card);
        iv.setImageBitmap(bmp);
    }

调试显示应用程序在尝试打开InputStream时崩溃。我查了一下,用于此的URI总是一样的。

2 个答案:

答案 0 :(得分:2)

从共享偏好中提取URI后,您可以直接将uri设置为imageview,而不需要将其转换为位图。

这是你如何设置uri到imageView:

    iv.setImageURI(uri);

答案 1 :(得分:0)

uri的保存过程可能存在问题..

正在保存

  edit.putString(URI, uri.toString());

它可能需要uri作为字符串..你可以做一件事......从uri中保存路径......似乎

edit.putString(URI, uri.getPath());

其他一切都会保持不变.. 希望这有效..