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

如何在JSON回调中正确传递newsfeed的category_name并解决App崩溃

解决JSON回调中正确传递单个category_name并避免App崩溃的方案

1. 先给模型类做空值防护与简化

如果只需要传递单个分类名称,无需携带整个Category对象,直接修改Newsfeed模型类,新增category_name字段存储目标值,同时避免多层对象调用的空指针风险:

public class Newsfeed {
    private int id;
    private String title;
    private String category_name; // 直接存储单个分类名称

    // 构造方法、getter/setter
}

2. JSON解析时精准提取分类名称

解析JSON数据时,直接定位到category.name字段,同时做空值兜底,避免字段缺失导致的异常:

  • 若用Gson解析,可通过SerializedName映射+默认值处理:
public class Newsfeed {
    // 其他字段...
    @SerializedName("category")
    private void parseCategory(JSONObject categoryObj) {
        this.category_name = categoryObj.optString("name", "未分类");
    }
}
  • 若手动解析,添加空值判断:
JSONObject newsObj = jsonArray.getJSONObject(i);
Newsfeed news = new Newsfeed();
// 其他字段赋值...
JSONObject categoryObj = newsObj.optJSONObject("category");
news.setCategory_name(categoryObj != null ? categoryObj.optString("name", "未分类") : "未分类");

3. 回调传递前做数据校验

在CallbackHome的回调实现中,统一处理异常数据,确保传递到展示层的category_name不为null:

@Override
public void onSuccess(List<Newsfeed> newsfeedList) {
    for (Newsfeed item : newsfeedList) {
        if (item.getCategory_name() == null || item.getCategory_name().trim().isEmpty()) {
            item.setCategory_name("未分类");
        }
    }
    // 传递给Adapter更新UI
    newsAdapter.updateData(newsfeedList);
}

4. UI展示层的最终防护

在Adapter的绑定方法中,直接使用处理后的category_name,彻底杜绝崩溃:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    Newsfeed news = newsList.get(position);
    holder.tvCategory.setText(news.getCategory_name());
}

核心注意事项

  • 禁止使用链式调用news.getCategory().getName(),一旦category为null会直接触发空指针崩溃;
  • 解析JSON优先用optXXX系列方法(如optString、optJSONObject),这类方法在字段不存在时返回默认值,不会抛出异常;
  • 给缺失的分类名称设置兜底文本(如"未分类"),既避免崩溃也保证用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:46:09