我必须通过JSON
发送Post
作为Retrofit
请求。为此,我创建了一个Json对象:
private JSONObject yourJSON(){
JSONObject jsonRoot = new JSONObject();
JSONObject jsonObject1 = new JSONObject();
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject2 = new JSONObject();
try{
jsonArray.put(jsonObject2);
jsonObject2.put("duration", "12");
jsonObject1.put("region", "NYC");
jsonObject1.put("or", jsonArray);
jsonRoot.put("q", jsonObject1);
jsonRoot.put("sort", "recent");
}catch (JSONException e){
e.printStackTrace();
}
return jsonRoot;
}
然后我使用此JSON
通过以下代码发送数据
RestApiAdapter restAdapter = new RestApiAdapter();
RoomListingAPI apiservice = restAdapter.providesRestAdapter().create(RoomListingAPI.class);
JSONObject response = apiservice.getRoomListing("qwerty","application/json", yourJSON());
public interface RoomListingAPI {
@POST("/api/listings/search")
JSONObject getRoomListing(@Header("x-parse-session-token") String token, @Header("Content-Type") String type, @Body JSONObject json);
}
我的目标是发送JSON并收到JSON,但它不起作用。我在这做错了什么。我也发送了正确的JSON
。我在这里做错了什么?
答案 0 :(得分:1)
您应该在后台任务上调用您的网络操作。否则,将抛出NetworkOnMainThreadException
。
现在改造有两种模式。同步或异步。
您正在使用同步模式,可能是在主线程中调用的。
您现在可以做的是更改为异步模式(使用改装回调)。
即改变自:
public interface RoomListingAPI {
@POST("/api/listings/search")
JSONObject getRoomListing(@Header("x-parse-session-token") String token, @Header("Content-Type") String type, @Body JSONObject json);
}
要:
public interface RoomListingAPI {
@POST("/api/listings/search")
void getRoomListing(@Header("x-parse-session-token") String token, @Header("Content-Type") String type, @Body JSONObject json, Callback<JsonObject> responseCallback);
}
获取JsonObject返回响应:
apiservice.getRoomListing("qwerty","application/json", yourJSON(),
new Callback<JsonObject>() {
@Override
public void success(JsonObject jsonObject, Response response) {
// jsonObject is what you're looking for
}
@Override
public void failure(RetrofitError error) {
// do something with the error
}
});
此外,使用gson库更好。因此使用JsonObject而不是JSONObject。不同的字母大小写,不同的图书馆,更好的表现。