2013-12-11 47 views
0

獲取服務器響應後,出現「JSONObject無法轉換爲ClassResponse」錯誤。我猜是因爲服務器的響應與ClassResponse中的字段不匹配?是否因爲JSON響應中的「數據」結構?我對每個領域都有一個制定者,但不知道我做錯了什麼。有沒有辦法改變Jackson庫的註釋來解析json對象的其他圖層?例如..Android Jackson Library解析

@JsonProperty(「data:accessToken」)或這種性質的東西......或者甚至是必要的?

服務器響應:

{ 
    success: "true" 
    message: "Record Created" 
    data: { 
     userToken : "1" 
      } 
} 

ClassResponse:

@JsonIgnoreProperties(ignoreUnknown = true) 
public class LoginResponse extends Response<LoginResponse.Result> 
{ 
    public static class Result 
    { 

     private String mUserToken; 
     private String mAccessToken; 
     private String mUserId; 

     public String getUserToken(){ 
      return mUserToken; 
     } 

     @JsonProperty("userToken") 
     public void setUserToken(final String aUserToken){ 
      mUserToken = aUserToken; 
     } 

     public String getAccessToken(){ 
      return mAccessToken; 
     } 

     @JsonProperty("accessToken") 
     public void setAccessToken(final String aAccessToken){ 
      mAccessToken = aAccessToken; 
     } 

     public String getUserId(){ 
      return mUserId; 
     } 

     @JsonProperty("user_id") 
     public void setUserId(final String aUserId){ 
      mUserId = aUserId; 
     } 
    } 
} 

    (edit) 
    @JsonProperty("data") 
    public void accessDataLayer(final String data) throws JSONException { 

     JSONObject jobj = new JSONObject(data); 

     mUserToken = jobj.getString("userToken"); 
     mAccessToken = jobj.getString("accessToken"); 
     mUserId = jobj.getString("user_id"); 

    } 



@Override 
public RESULT loadDataFromNetwork() throws Exception{ 
    final String url = buildUrl(); 

    HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection(); 
    String response; 

    try{ 
     conn.setDoInput(true); 
     conn.setDoOutput(true); 

     MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 

     JSONObject submitInfo = new JSONObject(); 
     submitInfo = buildParams(entity); 

     OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); 
     out.write(submitInfo.toString()); 
     out.close(); 

      response = readStream(conn.getErrorStream()); 

     conn.disconnect(); 
    } 
    return parse(response); 
+0

顯示完整的類並使用反序列化JSON的代碼。 –

回答

0

因爲你試圖在你的 「LoginResponse.class」 集合desserialize一個整體的JSONObject。這是不行的,因爲LoginResponse是JSON響應中數組「數據」的一個元素,但不是整個響應!要獲得數組,你應該寫這樣的事情

JsonArray data = (JsonArray) JSONObject.getAsJsonArray("data") 

之後,你會得到你的「數據」收集

+0

hey whiz,謝謝你的回覆,我昨天在發佈之後想到了這個,然後改成這樣的東西..但是我仍然無法投出錯誤(把原來帖子底部的變化) – AK824

+0

@ AK824 i剛剛查看了你的代碼更改,你可以發佈一個方法,你連接到服務器並調用「accessDataLayer」?我認爲問題可能是您在「accessDataLayer」 – whizzzkey

+0

@ AK824中將字符串作爲字符串提供給JSON我建議您使用https://code.google.com/p/google-gson/而不是Jackson。這是一個庫,它可以讓你從json中獲得一個沒有任何註釋,解析或無聊東西的對象。只需將您的類中的字段重命名爲json「data」結構中的相同名稱,現在您可以使用gson,享受它了。 – whizzzkey