NPE具有改进和嵌套的JSON响应

End*_*ave 1 android json retrofit

我正在使用改进版1.9,我在从嵌套的JSON响应中获取值时遇到了一些麻烦.这是回复

{
  "access_token": "83ebeabdec09f6670863766f792ead24d61fe3f9",
  "athlete": {
    "id": 227615,
    "resource_state": 3,
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个类来处理响应:

public class AuthResponse {

    String accessToken;
    StravaAthlete stravaAthlete;

    public AuthResponse(String accessToken, StravaAthlete stravaAthlete) {
        this.accessToken = accessToken;
        this.stravaAthlete = stravaAthlete;
    }

    public String getAccessToken() {
        return accessToken;
    }

    public StravaAthlete getStravaAthlete() {
        return stravaAthlete;
    }
}
Run Code Online (Sandbox Code Playgroud)

和嵌套JSON对象的类:

public class StravaAthlete {

    String id;

    public StravaAthlete(String id) {
        this.id = id;
    }

    public String getId() {
        return id;
    }
}
Run Code Online (Sandbox Code Playgroud)

不幸的是每当我打电话给authResponse.getStravaAthlete().getId()

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.drdp.rideart.api.model.StravaAthlete.getId()' on a null object reference
Run Code Online (Sandbox Code Playgroud)

不确定我做错了什么.我已将日志记录设置为完整,并且可以按照我期望的格式验证信息是否在响应中

Bla*_*elt 6

accessTokenStravaAthlete不是你的JSON的关键.这就是你得到null的原因.您可以将它们更改为access_tokenathlete,或使用@SerializedName注释.例如

public class AuthResponse {

   @SerializedName("access_token")
   String accessToken;
   @SerializedName("athlete")
   StravaAthlete stravaAthlete;
Run Code Online (Sandbox Code Playgroud)