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

Android中将API返回的Base64字符串显示到ImageView问题求助

解决Base64图片加载到ImageView触发异常的问题

我一眼就看出问题出在哪了——你拿到的Base64字符串带了前缀标识,直接解码肯定会失败!

你从API获取的字符串是这种格式:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUg.....KUfsaX4AAAAASUVORK5CYII=",其中data:image/png;base64,是MIME类型标识,并不是Base64编码的图片数据本身。Base64.decode()方法只能处理纯Base64编码的内容,带这个前缀会导致解码失败,直接跳进catch块。

修正步骤:

  • 先把前缀部分从字符串中移除,只保留逗号后面的纯Base64数据
  • 再执行解码和Bitmap转换操作
  • 额外加一步Bitmap空值判断,避免后续空指针问题

修正后的完整代码:

@BindView(R.id.zeichnung) ImageView drawable1;
try {
    String result = response.body().string();
    // 移除Base64字符串的前缀标识
    if (result.startsWith("data:image/")) {
        // 找到逗号的位置,截取后面的纯Base64内容
        int commaIndex = result.indexOf(",");
        if (commaIndex != -1) {
            result = result.substring(commaIndex + 1);
        }
    }
    // 解码纯Base64数据
    byte[] decodedString = Base64.decode(result, Base64.DEFAULT);
    Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
    
    // 判断Bitmap是否成功生成,再设置到ImageView
    if (decodedByte != null) {
        drawable1.setImageBitmap(decodedByte);
    } else {
        Toasty.error(VideoChatActivity.this, "图片解码失败.", Toast.LENGTH_SHORT, true).show();
    }
} catch (Exception e) {
    // 打印异常信息方便排查(上线前可移除)
    e.printStackTrace();
    Toasty.error(VideoChatActivity.this, "加载图片出错: " + e.getMessage(), Toast.LENGTH_SHORT, true).show();
}

额外提示:

如果API可能返回不同格式的图片(比如jpg、webp),前缀会变成data:image/jpeg;base64,之类的,上面的代码通过找逗号位置截取的方式,能兼容所有这类带MIME前缀的Base64图片字符串,比硬写png前缀更通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:18