无法完成 Retrofit 请求?

Not able to complete the Retrofit request?

我必须通过 RetrofitJSON 作为 Post 请求发送。为此,我创建了一个 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());

API方法

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。我在这里做错了什么?

您应该改为在后台任务上调用您的网络操作。否则,将抛出 NetworkOnMainThreadException

现在retrofit有两种模式。同步或异步。

您正在使用同步模式,大概是在您的主线程中调用的。

你现在能做的就是改成异步模式(使用retrofit回调)。

即从:

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 return 响应:

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。不同的字母大小写,不同的库,更好的性能。