You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用setImageURI从数据库加载图片到Android ImageView及页面传参显示

关于网络图片加载的问题

你遇到的问题其实是因为setImageURI()这个方法的设计初衷并不是用来加载网络图片的——它只支持本地文件Uri或者Content Provider提供的Uri,没有处理网络请求、图片解码缓存这些能力,所以直接传网络URL肯定没效果。

既然你之前已经在用Glide了,其实继续用Glide来加载这个详情页的图片是最稳妥的,代码也简单,完全不用折腾系统方法:

Glide.with(this)
     .load(image) // 直接传你从Intent拿到的URL字符串就行
     .into(displayImage);

要是你实在不想用第三方库,那得自己写异步网络请求下载图片,转成Bitmap后用setImageBitmap()设置,但这样要处理很多细节(比如网络异常、内存缓存、图片压缩),远不如Glide省心。

用setImageURI从数据库加载图片的两种场景

这个得看你数据库里存的是图片的什么数据,分两种情况:

场景1:数据库存的是本地图片文件路径

如果数据库里存的是图片在本地存储的绝对路径(比如/sdcard/Pictures/xxx.png),可以把路径转成Uri后用setImageURI():

// 从数据库获取图片路径
String localImagePath = "从数据库查询到的路径";
File imageFile = new File(localImagePath);
if (imageFile.exists()) {
    // 注意Android 7.0+要用FileProvider生成安全Uri,避免FileUriExposedException
    Uri imageUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", imageFile);
    displayImage.setImageURI(imageUri);
}

关于FileProvider的配置,你需要:

  • 在AndroidManifest.xml里注册FileProvider组件,指定authorities和文件路径
  • 在res/xml下创建file_paths.xml,定义允许共享的本地目录

场景2:数据库存的是图片的Blob二进制数据

这种情况setImageURI()没法直接用,因为Blob不是Uri格式。你有两种选择:

  1. 把Blob转成Bitmap,用setImageBitmap()设置:
Blob blob = 从数据库查询到的Blob对象;
byte[] imageBytes = blob.getBytes(1, (int) blob.length()); // 注意索引从1开始
Bitmap bitmap = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
displayImage.setImageBitmap(bitmap);
  1. 把Blob写入临时文件,再用setImageURI()加载:
Blob blob = 从数据库查询到的Blob对象;
byte[] imageBytes = blob.getBytes(1, (int) blob.length());
// 创建缓存目录下的临时文件
File tempImage = new File(getCacheDir(), "temp_db_image.jpg");
try (FileOutputStream fos = new FileOutputStream(tempImage)) {
    fos.write(imageBytes);
} catch (IOException e) {
    e.printStackTrace();
}
// 用FileProvider生成Uri加载
Uri tempUri = FileProvider.getUriForFile(this, getPackageName() + ".fileprovider", tempImage);
displayImage.setImageURI(tempUri);

内容的提问来源于stack exchange,提问作者Proversion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:40:05