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

Retrofit请求响应成功但Result集合为空的技术排查求助

问题排查与解决方案

嘿,我一眼就瞅出问题出在哪了!咱们先拆解下核心矛盾:

你返回的JSON响应里,集合对应的key是result,但你的Respon实体类里用的是resultBab字段名——Gson默认是严格按照字段名和JSON key完全匹配来解析的,这就导致Gson找不到对应的值,自然把resultBab设为null了。

先看你的JSON结构(划重点):

{"value":1,"result":[{"id_bab":"4","id_kitab":"1","bab":"Wudhu"},...]}

解决方案有两种,选一种就行:

方案1:用@SerializedName注解映射字段

不用改字段名,给resultBab加上注解指定JSON里的key:

public class Respon {
    private String value;
    // 告诉Gson:这个字段对应JSON里的"result" key
    @SerializedName("result")
    private List<BabResult> resultBab;

    // getter方法保持不变
    public String getValue() { return value; }
    public List<BabResult> getResultBab() { return resultBab; }
}

方案2:直接修改字段名和JSON key一致

把实体类的字段名改成result,和JSON里的key对齐:

public class Respon {
    private String value;
    private List<BabResult> result;

    // getter也要对应改成getResult()
    public String getValue() { return value; }
    public List<BabResult> getResult() { return result; }
}

⚠️ 注意:用这个方案的话,Activity里的代码也要同步修改:

// 把原来的getResultBab()改成getResult()
results = response.body().getResult();

额外的优化建议(避免踩坑)

  1. 增加非空判断:在onResponse里先确认响应体不为null,防止空指针崩溃:
@Override
public void onResponse(Call<Respon> call, Response<Respon> response) {
    pbLoading.setVisibility(View.GONE);
    // 先判断请求成功且响应体非空
    if (response.isSuccessful() && response.body() != null) {
        String value = response.body().getValue();
        // 用"1".equals(value)更安全,避免value为null时崩溃
        if ("1".equals(value)) {
            results = response.body().getResultBab();
            babAdapter = new BabAdapter(MenuBab.this, results);
            rvBab.setAdapter(babAdapter);
        }
    }
}
  1. 修复Adapter的getItemCount:原来返回4的逻辑会导致results为null时触发索引越界,改成返回0更合理:
@Override
public int getItemCount() {
    return results == null ? 0 : results.size();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:51