2017-02-16 31 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

相同,没有变化 –