java - 尝试访问 POJO 属性时为空指针

标签 java android gson retrofit

我正在使用 Retrofit 2 来使用 JSON API,我有以下 JSON 结构

{
    "data": {
        "id": 1,
        "name": "Josh"
    }
}

我的用户 POJO 看起来像:

public class User {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

还有我的用户界面

@GET("/api/v1/me")
Call<User> me();

但是当我尝试执行 response.body().getName() 时,我遇到了空指针异常。

发出请求的代码

UserService userService = ServiceGenerator.createService(UserService.class)

    Call<User> call = userService.me();

    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Response<User> response, Retrofit retrofit) {
            if(response.isSuccess()) {
                Log.i("user", response.body().getName().toString());
            }

        }

        @Override
        public void onFailure(Throwable t) {
            Log.i("hello", t.getMessage());
        }
    });

最佳答案

您应该按如下方式创建 POJO 类:

用于 json 响应的 POJO:

public class User {


    private Data data;


    public Data getData() {
        return data;
    }


    public void setData(Data data) {
        this.data = data;
    }

}

用于内部数据的 POJO:

public class Data {


    private int id;

    private String name;


    public int getId() {
        return id;
    }


    public void setId(int id) {
        this.id = id;
    }


    public String getName() {
        return name;
    }


    public void setName(String name) {
        this.name = name;
    }

}

而不是使用response.body().getData().getName()来访问响应中的名称。

关于java - 尝试访问 POJO 属性时为空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33869327/

相关文章:

java - 序列化模拟抛出异常

java - Gson:序列化时如何忽略@SerializeName

android - 在 Android apk 安装上运行任务

android - 在 Canvas 中调整图像大小

java - 在 Java3D 中选择并移动多个形状

java - 如何计算2个Unix timeSpan差异。例如int结束时间=1213036458; int开始时间= 1211018446;

android - 无法从 sqlite 表中删除列 [Android]

java - 由于缺少私有(private)字段,将 json 解析为 myObj 失败

java - 从表构造树

java - 防止 arraylist 中的重复条目