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

时间:2016-02-07 21:26:58

标签: android json retrofit

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

{
  "access_token": "83ebeabdec09f6670863766f792ead24d61fe3f9",
  "athlete": {
    "id": 227615,
    "resource_state": 3,
    ...
  }
}

我有一个类来处理响应:

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;
    }
}

和嵌套JSON对象的类:

public class StravaAthlete {

    String id;

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

    public String getId() {
        return id;
    }
}

不幸的是,每当我致电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

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

2 个答案:

答案 0 :(得分:6)

+-------------+-----------+ |coupon name |Created at | +-------------+-----------+ |c4 |2016-01-19 | |c5 |2016-01-19 | |c6 |2016-01-20 | |c7 |2016-01-20 | |c8 |2016-01-20 | |c9 |2016-01-20 | |c10 |2016-01-21 | |c11 |2016-01-21 | +-------------+-----------+ accessToken不是您的JSON的关键。这就是你得到null的原因。您可以将其更改为StravaAthleteaccess_token,也可以使用athlete注释。 E.g。

@SerializedName

答案 1 :(得分:1)

我在此处可以看到的第一个字段public class AuthResponse { @SerializedName("access_token") String accessToken; @SerializedName("athlete") StravaAthlete stravaAthlete; 字段的名称应与您的班级athlete中的字段匹配,或者添加注释stravaAthlete