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

