获取本地图片后,通过保存路径的方式重新加载图片的问题

袋鼠飞翔 2015-06-07 07:15:01
通过一个点击事件从相册中获取图片后,通过SharedPreferences保存图片的uri,使得下次打开应用时,加载SharedPreferences保存的图片路径,以重新加载之前选择的图片。可是,在真机上测试一直提示找不到图片?
我打印出了保存的路径名,并没有错,可就是加载不了图片。虽然知道可以用数据库或者其他方式保存图片,但是为什么这种保存路径的方式不能实现呢?请路过的[/code]大侠解惑。。。。
代码如下
private Button bt_add;
private ImageView iv_local;

private SharedPreferences sp;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

iv_local = (ImageView) findViewById(R.id.iv_loacl);

sp = getSharedPreferences("imagepath", MODE_PRIVATE);
String path = sp.getString("path", "");
if ("".equals(path) == false) {
System.out.println("保存的图片路径为:"+ path);
try {
ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse(path);
Bitmap bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri));
iv_local.setImageBitmap(bitmap);
} catch (Exception e) {
// TODO Auto-generated catch block
Toast.makeText(this, "图片未找到!", Toast.LENGTH_SHORT).show();
}
}

bt_add = (Button) findViewById(R.id.bt_add);
bt_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
/* 开启Pictures画面Type设定为image */
intent.setType("image/*");
/* 使用Intent.ACTION_GET_CONTENT这个Action */
intent.setAction(Intent.ACTION_GET_CONTENT);
/* 取得相片后返回本画面 */
startActivityForResult(intent, 1);
}

});
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
//用户点击所需的图片后,返回一个uri
Uri uri = data.getData();
Log.e("uri", uri.toString());

try {
ContentResolver resolver = this.getContentResolver();
Bitmap bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri));
iv_local.setImageBitmap(bitmap);
//将得到的图片的路径保存在SharedPreferences中
sp = getSharedPreferences("imagepath", MODE_PRIVATE);
Editor editor = sp.edit();
editor.putString("path", uri.toString());
editor.commit();

}catch (IOException e) {
Log.e("Exception", e.getMessage(), e);
}
}
super.onActivityResult(requestCode, resultCode, data);
}
...全文
389 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_29487749 2016-01-09
  • 打赏
  • 举报
回复
这种方法我在API 19能用,到API 18就不行了,得换。
StoneHui_ 2015-06-11
  • 打赏
  • 举报
回复
这样试试 BitmapFactory.decodeFile(path);
袋鼠飞翔 2015-06-08
  • 打赏
  • 举报
回复
引用 2 楼 hjq2013 的回复:
查看日志看是否能看出问题在哪儿




保存前和提取出来的图片路径是一致的,但是就是重新加载不出来。难道用ContentResolver这种方式从SharedPreferrences中解析uri的方式行不通?
袋鼠飞翔 2015-06-08
  • 打赏
  • 举报
回复
引用 3 楼 Arnold9009 的回复:
一步一步查呀 先确认路径对不对 然后看bitmap返回的时候正确 还有就是你获取图片的时候,资源是否已经可获取
保存之前打印的log显示:content://com.android.providers.media.documents/document/image%3A311006 加载的时候打印的信息:保存的图片路径为:content://com.android.providers.media.documents/document/image%3A311006 路径方面应该是没有问题的啊! 从相册回传uri解析后加载图片没有问题,但是用保存的路径解析log却总是提示“图片未找到!”
袋鼠飞翔 2015-06-08
  • 打赏
  • 举报
回复
引用 4 楼 u013377714 的回复:
肯定是解析这个图片地址的时候出错了 ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse(path); Bitmap bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri)); iv_local.setImageBitmap(bitmap); 这种解析有错误。。
从相册选择图片后回传的uri和加载保存的uri用的是一样的解析方式,为什么加载的时候就加载不了呢?
水的川 2015-06-08
  • 打赏
  • 举报
回复
肯定是解析这个图片地址的时候出错了 ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse(path); Bitmap bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri)); iv_local.setImageBitmap(bitmap); 这种解析有错误。。
Arnold9009 2015-06-08
  • 打赏
  • 举报
回复
一步一步查呀 先确认路径对不对 然后看bitmap返回的时候正确 还有就是你获取图片的时候,资源是否已经可获取
Hare_ 2015-06-08
  • 打赏
  • 举报
回复
查看日志看是否能看出问题在哪儿
网络咖啡 2015-06-07
  • 打赏
  • 举报
回复
如果路径没有问题的话,就是读取文件这样的耗时操作不能再UI线程中,需要使用单独的线程或回调方法。

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧