我让用户选择一张图片,并将我从此操作中收到的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总是一样的。
答案 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());
其他一切都会保持不变.. 希望这有效..