2017-02-16 29 views
0

嗨,我是新來翻新和麪臨問題,以發佈json數據調用api的。我嘗試了很多解決方案,但沒有得到答案。如何通過原始json數據改造2.0

這是我的代碼

     Map<String,String> data=new HashMap<>(); 
       data.put("email",email); 
       data.put("feedback",feedback); 
       RequestBody body = RequestBody.create(okhttp3.MediaType.parse("application/json; charset=utf-8"), (new JSONObject(data)).toString()); 
       Call<Feedback> call = apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,body); 
       call.enqueue(new Callback<Feedback>() { 
        @Override 
        public void onResponse(Call<Feedback> call, Response<Feedback> response) { 
         Log.e("Response",String.valueOf(response.code())); 
         Message message=response.body().getMessage(); 
         String messageBody=message.toString(); 
         String status=response.body().getStatus(); 
         Toast.makeText(getApplicationContext(),status+" : "+messageBody,Toast.LENGTH_LONG).show(); 
        } 

        @Override 
        public void onFailure(Call<Feedback> call, Throwable t) { 

        } 
       }); 

和我的界面是

 @POST("feedbacks") 
public Call<Feedback> feedbackResponse(@Header(ApiConstant.ACCESS_TOKEN) String accessToken, @Header(ApiConstant.TOKEN_TYPE) String tokenType, 
             @Header(ApiConstant.CLIENT) String client, @Header(ApiConstant.EXPIRY) String expiry, 
             @Header(ApiConstant.UID) String uid, @Body RequestBody feedback); 

使用,因爲我用它爲每個API這樣的頭是不會放棄的問題。所以不要考慮標題是問題。

我的回答是

public class Feedback { 
private Message message; 

private String status; 

private Data data; 

public Message getMessage() 
{ 
    return message; 
} 

public void setMessage (Message message) 
{ 
    this.message = message; 
} 

public String getStatus() 
{ 
    return status; 
} 

public void setStatus (String status) 
{ 
    this.status = status; 
} 

public Data getData() 
{ 
    return data; 
} 

public void setData (Data data) 
{ 
    this.data = data; 
} 

@Override 
public String toString() 
{ 
    return "ClassPojo [message = "+message+", status = "+status+", data = "+data+"]"; 
} 

}

普萊舍建議我的正確途徑。

+0

http://stackoverflow.com/q/21398598/7012517烏拉圭回合參考..! – Shobhit

+0

老兄,我也跟着這個教程。但沒有得到答覆。它顯示了Nullpointer異常。 –

回答

1

更改簽名

@POST("feedbacks") 
    public Call<Feedback> feedbackResponse(@Header(ApiConstant.ACCESS_TOKEN) String accessToken, @Header(ApiConstant.TOKEN_TYPE) String tokenType, 
              @Header(ApiConstant.CLIENT) String client, @Header(ApiConstant.EXPIRY) String expiry, 
              @Header(ApiConstant.UID) String uid, @Body Map<String,Object> feedback); 

,並呼籲以

Map<String,Object> data=new HashMap<>(); 
       data.put("email",email); 
       data.put("feedback",feedback); 
apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,data); 

變化@Body數據類型JsonObject並嘗試

JsonObject data = new JsonObject(); 
    data.addProperty("email",email); 
    data.add("feedback",new Gson().toJsonTree(feedback)); 
apiInterface.feedbackResponse(accessToken,tokenType,client,expiry,uid,data); 

ÿ你也可以試試@Body FeedbackRequestData data。有多種方式可以做到這一點。

apiInterface必須用gson解析器初始化。 如果每個請求都需要標頭,那麼使用okHttp攔截器。

確保由http://www.jsonschema2pojo.org/生成您的反饋類,而選擇JSON和GSON

+0

雅我試過這個,得到這個錯誤。 java.lang.NullPointerException:試圖調用空對象引用虛擬方法'com.androidapp.dooble.networks.Message com.androidapp.dooble.networks.Pojo.feedback.Feedback.getMessage()' –

+0

試試這個JsonObject數據=新的JsonObject(); data.addProperty(「email」,email); data.add(「feedback」,new Gson()。toJsonTree(feedback)); – Qamar

+0

相同,沒有變化 –