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

Android Retrofit调用API返回Null值问题求助

问题分析与解决方案

核心问题定位

你遇到的response.body()为null或字段值为空的问题,主要来自两个关键原因:


1. 实体类字段与JSON映射不匹配

DummyJSON的/todo/{id}接口返回的JSON字段为todo,但你的Todo类中,该字段的getter方法命名为getTitle()——Gson默认会根据getter方法推断字段名为title,无法匹配JSON中的todo字段,导致该字段值为空,甚至可能影响整个实体类的解析。

修复方案(二选一)

方案A:修正getter方法命名,与字段名一致
public class Todo {
    private int userId;
    private int id;
    private String todo;
    private boolean completed;

    public int getUserId() {
        return userId;
    }

    public int getId() {
        return id;
    }

    // 将getTitle()改为getTodo(),与字段名对应
    public String getTodo() {
        return todo;
    }

    public boolean isCompleted() {
        return completed;
    }
}
方案B:添加@SerializedName注解指定JSON字段名

如果需要保留getTitle()方法,可通过注解明确映射关系:

import com.google.gson.annotations.SerializedName;

public class Todo {
    private int userId;
    private int id;
    // 指定JSON中的字段名为"todo"
    @SerializedName("todo")
    private String todo;
    private boolean completed;

    public int getUserId() {
        return userId;
    }

    public int getId() {
        return id;
    }

    public String getTitle() {
        return todo;
    }

    public boolean isCompleted() {
        return completed;
    }
}

2. 未检查响应状态,缺少排查日志

直接调用response.body()前,未判断请求是否成功。如果响应状态码不在200-300范围内,response.body()会直接返回null,且你没有打印关键排查信息。

修复后的onResponse方法

@Override
public void onResponse(Call<Todo> call, Response<Todo> response) {
    Log.e("info", "响应状态码: " + response.code());
    if (response.isSuccessful()) {
        Todo todo = response.body();
        if (todo != null) {
            Log.e("info", "userId: " + todo.getUserId());
            Log.e("info", "id: " + todo.getId());
            Log.e("info", "todo内容: " + todo.getTodo()); // 或todo.getTitle(),根据你的修复方案
            Log.e("info", "是否完成: " + todo.isCompleted());
        }
    } else {
        // 打印错误响应体,排查请求失败原因
        try {
            Log.e("info", "错误响应内容: " + response.errorBody().string());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

额外检查项

  1. 依赖与权限确认
    确保Module的build.gradle中添加了Retrofit和Gson转换器依赖:

    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'
    

    同时在AndroidManifest.xml中添加网络权限:

    <uses-permission android:name="android.permission.INTERNET" />
    
  2. API路径验证
    你的ApiInterface和ApiClient拼接后的URL为https://dummyjson.com/todo/1,完全符合DummyJSON的接口规范,无需修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 20:20:36