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

使用Volley请求Unsplash API时遭遇JSONArray解析JSONException问题求助

解决Volley请求Unsplash API时的JSON解析异常

别慌,我一眼就看出问题所在啦!你遇到的JSONException完全是因为对接口返回的数据结构判断错了——Unsplash的搜索照片接口返回的不是直接的JSON数组,而是一个外层包裹的JSON对象,真正的图片数据数组藏在这个对象的results字段里。你误用了JsonArrayRequest来请求,自然会因为格式不匹配抛出异常。

问题根源

看你日志里的报错内容:Value {"total": 44760, "total_pages": 4476, "results":[{JSONObjects}]},这明显是一个JSON对象,而你用JsonArrayRequest去解析,Volley会默认把返回数据当成JSON数组来处理,直接就触发了格式异常。

修正方案

改用JsonObjectRequest来发起请求,拿到外层JSON对象后,再提取里面的results数组进行遍历处理就可以了。下面是修正后的完整代码:

// 替换成你自己的有效Access Key
String URL = "https://api.unsplash.com/search/photos?query=wood&client_id=YOUR_ACTUAL_ACCESS_KEY";

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(
        Request.Method.GET,
        URL,
        null,
        new Response.Listener<JSONObject>() {
            @Override
            public void onResponse(JSONObject response) {
                if (response != null) {
                    try {
                        // 提取真正的图片数据数组
                        JSONArray resultsArray = response.getJSONArray("results");
                        // 遍历数组处理每个图片对象
                        for (int i = 0; i < resultsArray.length(); i++) {
                            JSONObject photoObj = resultsArray.getJSONObject(i);
                            Log.d("TESTING", photoObj.getString("id"));
                        }
                        // 关闭加载弹窗
                        p.dismiss();
                    } catch (JSONException e) {
                        e.printStackTrace();
                        Log.d("TESTING", "JSON解析出错:" + e.getMessage());
                    }
                }
            }
        },
        new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Log.d("TESTING", "请求出错:" + (error.getMessage() != null ? error.getMessage() : "未知错误"));
            }
        }
);

RequestQueue requestQueue = Volley.newRequestQueue(this);
requestQueue.add(jsonObjectRequest);

关键注意点

  • 一定要替换代码里的YOUR_ACTUAL_ACCESS_KEY为你在Unsplash开发者平台申请到的有效Access Key,否则请求会被拒绝。
  • 后续如果需要获取图片的其他信息(比如图片地址、摄影师信息),都要从results数组里的每个JSONObject中提取,不要直接从外层对象拿。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 03:48:21