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

Android JSON解析无数据显示,请求技术排查协助

问题排查与修复方案

你的APP提示无数据,核心问题出在JSON解析逻辑的多处错误,导致解析过程抛出异常,最终返回空的新闻列表。下面我们逐一拆解问题并给出修复代码:

解析代码中的关键错误

  1. 错误处理response字段
    原JSON里的response本身就是一个JSONObject,但你却把它当作String取出后再重新转为JSONObject——这不仅多余,还可能在某些场景下触发解析错误。
  2. 循环中错误获取新闻对象
    你已经从results数组中取出了currentNews(这就是单条新闻的对象),但又试图从currentNews里再获取results对象,而原JSON里单条新闻根本没有results这个key,这会直接抛出JSONException,导致整个解析流程中断。
  3. 作者信息的获取路径错误
    作者的firstName并不在新闻对象的根节点,而是嵌套在tags数组中type为contributor的对象里,你直接从新闻对象取firstName必然失败。

修复后的解析代码

private static List<News> extractFeatureFromJson(String newsJSON) {
    if (TextUtils.isEmpty(newsJSON)) {
        return null;
    }
    List<News> news = new ArrayList<>();
    try {
        JSONObject baseJsonResponse = new JSONObject(newsJSON);
        // 直接获取response JSONObject,不需要转String再转JSON
        JSONObject responseObject = baseJsonResponse.getJSONObject("response");
        JSONArray newsArray = responseObject.getJSONArray("results");

        for (int i = 0; i < newsArray.length(); i++) {
            JSONObject currentNews = newsArray.getJSONObject(i);
            // 直接从currentNews获取新闻核心字段
            String title = currentNews.getString("webTitle");
            String section = currentNews.getString("sectionName");
            String url = currentNews.getString("webUrl");
            String author = "";

            // 处理作者信息:遍历tags数组找到贡献者
            JSONArray tagsArray = currentNews.getJSONArray("tags");
            for (int j = 0; j < tagsArray.length(); j++) {
                JSONObject tag = tagsArray.getJSONObject(j);
                if ("contributor".equals(tag.getString("type"))) {
                    String firstName = tag.optString("firstName", "");
                    String lastName = tag.optString("lastName", "");
                    author = firstName + " " + lastName;
                    // 找到第一个贡献者后即可退出循环
                    break;
                }
            }

            News nNews = new News(title, section, author.trim(), url);
            news.add(nNews);
        }
    } catch (JSONException e) {
        Log.e("QueryUtils", "Problem parsing the news JSON results", e);
    }
    return news;
}

额外说明

  • 我用了optString来获取作者名,避免因为字段缺失导致解析失败;
  • 作者名拼接后做了trim()处理,防止空字符串出现多余空格;
  • 你的Loader代码本身没有问题,但因为解析过程抛出异常,news会是空列表,所以才会显示no_news。修复解析逻辑后,就能正常加载数据了。

内容的提问来源于stack exchange,提问作者NA- Chan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:08:13