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

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


我的User 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类:

POJO用于​​json响应:

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/

10-09 01:42
查看更多