安卓Java开发:如何解析JSON数组数据到RecyclerView并解决闪退问题
问题根因
从错误日志可以直接定位崩溃原因:崩溃发生在Adapter_meeting的onBindViewHolder方法第47行,对应代码为:
holder.tv_namaEvent.setText(mitem_meeting.get(position).getValue());
由于getValue()返回的是Integer类型,直接传入setText()方法时,系统会将这个整数识别为字符串资源ID,尝试从资源表中查找对应的字符串,查找失败就会抛出Resources$NotFoundException,该问题和JSON数组结构本身没有关联。
修复方案
只需要把Integer类型的步数转成字符串再传给setText即可,修改onBindViewHolder内的对应代码:
@Override public void onBindViewHolder(@NonNull viewHolder holder, int position) { // 将Integer转成字符串后再设置到TextView,两种写法二选一即可 holder.tv_namaEvent.setText(String.valueOf(mitem_meeting.get(position).getValue())); // 也可以写为 holder.tv_namaEvent.setText(mitem_meeting.get(position).getValue() + ""); holder.tv_lokasiEvent.setText(mitem_meeting.get(position).getStartTime()); holder.tv_waktuEvent.setText(mitem_meeting.get(position).getEndTime()); holder.tv_tanggalEvent.setText(mitem_meeting.get(position).getStartTimeMillis()); }
额外优化建议
- 建议增加空值判断逻辑,判断
response.body()、resource.steps_count不为空后再初始化适配器,避免空指针崩溃 - 如果后续需要解析接口返回的
heart_minutes、weight等其他数组字段,只需要在nodeApi类中新增对应字段的List声明即可,示例如下:
public class nodeApi { @SerializedName("steps_count") public List<steps_count> steps_count = null; // 新增其他数组字段声明 @SerializedName("heart_minutes") public List<HeartMinutes> heartMinutes = null; @SerializedName("weight") public List<Weight> weight = null; // 再补充对应HeartMinutes、Weight等实体类的定义即可 }
内容的提问来源于stack exchange,提问作者Alifa Al Farizi
相关产品推荐
相关产品推荐

