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

Android Studio 如何从含多URL的JSON响应中存储指定图片URL

Unsplash API请求后的图片地址取值逻辑修正

之前的取值逻辑没对上Unsplash接口的实际返回结构:响应JSON的顶层根本没有url字段,直接调用response.getString("url")要么取不到有效值,要么抛JSON异常,可用于加载的图片地址全部嵌套在urls子对象下。

核心修正步骤

  • 拿到Volley返回的根响应JSONObject后,先从根节点取出嵌套的urls子对象,不要在根节点强行取不存在的url字段
  • 根据实际业务场景的分辨率需求,从urls子对象中提取对应分支的地址赋值给currentUrl:
    • 低分辨率快速加载场景(如缩略图列表):取thumb或small字段
    • 页面主图展示、平衡清晰度与加载速度:取regular字段
    • 高清展示、原图分享场景:取full字段;注意日常页面加载不要用raw字段,该分支对应无压缩原图,体积过大易拖慢加载速度、消耗用户多余流量
  • 所有JSON取值操作必须包裹异常捕获逻辑,避免接口字段变动、返回异常内容时直接抛出异常导致应用崩溃,异常分支要给currentUrl设置兜底值,杜绝空指针风险

修正后的关键代码示例

@Override
public void onResponse(JSONObject response) {
    try {
        // 提取嵌套的urls子对象
        JSONObject urlsObj = response.getJSONObject("urls");
        // 选取适配主图展示的regular地址赋值给currentUrl
        currentUrl = urlsObj.getString("regular");
        
        // 原有逻辑:通过Glide将currentUrl加载到对应ImageView
        Glide.with(MainActivity.this)
            .load(currentUrl)
            .into(binding.ivDisplay);
    } catch (JSONException e) {
        e.printStackTrace();
        // 异常兜底:给currentUrl赋值项目内置的兜底图片地址
        currentUrl = "replace_with_your_local_fallback_image_res";
    }
}

配套交互的适配说明

修正取值逻辑后,currentUrl会存储有效的图片地址:

  • Glide可以直接基于该变量正常完成图片渲染到ImageView的流程
  • 后续切换下一张图片、分享当前图片的功能,不需要额外发起重复请求,直接读取已存储的currentUrl变量即可完成对应操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 05:45:03