2016-02-07 42 views
1

我正在使用改進1.9,並且從嵌套JSON響應中獲取值時遇到了一些問題。這裏是響應具有改進和嵌套JSON響應的NPE

{ 
    "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 

不知道我在做什麼錯。我已將日誌記錄設置爲完整,並且可以驗證信息是否以我期望的格式響應

+0

被改造設置是否正確? – j2emanue

+0

我這樣認爲。它爲我需要的一切工作。這是我第一次嘗試訪問任何嵌套的東西,雖然 – EnduroDave

回答

6

accessTokenStravaAthlete不是您的JSON的關鍵。這就是爲什麼你得到空。您可以將它們更改爲access_tokenathlete,或使用@SerializedName註釋。例如。

public class AuthResponse { 

    @SerializedName("access_token") 
    String accessToken; 
    @SerializedName("athlete") 
    StravaAthlete stravaAthlete; 
+0

Doh。感謝您發現這個 – EnduroDave

+0

不客氣 – Blackbelt

1

第一本我可以在這裏看到的是場athlete的名稱應該在你的stravaAthlete類的字段相匹配,或添加註釋@SerializedName(value="athlete")