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
相关产品推荐
相关产品推荐

