在改造响应中接收空体

时间:2016-03-14 20:04:58

标签: android json gson retrofit2

我正在使用改造来从http URL获取数据。 我的接口类:

public interface SlotsAPI {

    /*Retrofit get annotation with our URL
      And our method that will return a Json Object
    */
    @GET(url)
    retrofit.Call<JSONObject> getSlots();
}

我的请求方法。

public void getResponse(){

    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(URL)
                    .addConverterFactory(GsonConverterFactory.create())
                    .build();

    //Creating an object of our api interface
    SlotsAPI api = retrofit.create(SlotsAPI.class);
    retrofit.Call<JSONObject> callback = api.getSlots();
    callback.enqueue(new Callback<JSONObject>() {
    @Override
    public void onResponse(Response<JSONObject> response) {
        if (response != null) {
            Log.d("OnResponse", response.body().toString());
        }
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
    });
}

在响应中,我收到一个空体。服务器响应200 OK。

D/OnResponse: {}

但是当我在浏览器中打开URL时,我会在屏幕上显示JSONObject。

9 个答案:

答案 0 :(得分:11)

你应该这样试试......

public interface SlotsAPI {

/*Retrofit get annotation with our URL
  And our method that will return a Json Object
*/
@GET(url)
Call<JsonElement> getSlots();
}

请求方法

 retrofit.Call<JsonElement> callback = api.getSlots();
callback.enqueue(new Callback<JsonElement>() {
@Override
public void onResponse(Response<JsonElement> response) {
    if (response != null) {
        Log.d("OnResponse", response.body().toString());
    }
}

答案 1 :(得分:6)

请检查您的JsonObject。如果你想在json中得到响应,你必须定义一个响应类型JsonObject而不是JSONObject,否则在你的接口中指定pojo类。

答案 2 :(得分:0)

我认为你不了解改造费用。 正确的界面应该是:

public interface SlotsAPI {

    /*Retrofit get annotation with our URL
      And our method that will return a Json Object
    */
    @GET(url)
    JSONObject getSlots();
}

当您调用getSlots方法时,retrofit将自动执行HTTP请求并返回JSONObject。 你需要从主线程中做到这一点。

答案 3 :(得分:0)

确保@Get的网址是相对路径

  • @Base URL:始终以/

  • 结尾
  • @ Url:不要以/

  • 开头

示例:

  String URL = http://api.co/base/ ;

  @GET("webservice/syncdown")
  JSONObject getSlots();

您可能会收到一个Slots列表。如果发送json数组

,Gson转换器将处理它
 @GET(url)
 retrofit.Call<List<Slot>> getSlots();

答案 4 :(得分:0)

您正在使用改装2还是1?版本2仍处于测试阶段。 如果您使用的是版本1.使用此:

public interface SlotsAPI {

    /*Retrofit get annotation with our URL
      And our method that will return a Json Object
    */
    @GET(url)
    void getSlots(Callback<JsonElement> callback);
}

这样调用将是异步的。

答案 5 :(得分:0)

这里有同样的问题,answer from curiousMind节省了我的一天 关于同一主题的更多内容:如果您需要从一对中获取值,请使用:

String value = response.body().getAsJsonObject().get("pair_name").getAsString();

答案 6 :(得分:0)

通话&LT;无效&GT; getSlots()为我工作。

答案 7 :(得分:0)

 private void APIRetrofit_method() {
      Retrofit  retrofit = new Retrofit.Builder()
                .baseUrl(RecyclerInterface.JSONURL)
               // .client(okHttpClient)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        RecyclerInterface api = retrofit.create(RecyclerInterface.class);

        Call<ResponseBody> call = api.getString(); /// GET METHOD without passing params
        // Post METHOD CODE START
//        HashMap<String, String> params = new HashMap<String, String>();
//        params.put("name", "yuva");
//        params.put("pass", "" + "123");
     //   Call<ResponseBody> call1 = api.getProspectList(params);
        // Post METHOD CODE END

答案 8 :(得分:0)

            call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                   try {
                        Log.d(TAG, "GetProspectlistresponse" + "" + response.isSuccessful());
                        utility.hideProgressDialog();
                        if (response.isSuccessful()) {

                            String remoteResponse = new String(response.body().string());
                            Log.d(TAG, "Holidaylistresponse" + "" + remoteResponse);
                            try {

            JSONObject object = new JSONObject(remoteResponse);
            JSONArray array = object.getJSONArray("Holidays_Details");

            if (array.toString().equals("[]")) {
                holiday_recyclerView.setVisibility(View.GONE);
            } else {
                holiday_recyclerView.setVisibility(View.VISIBLE);
                for (int i = 0; i < array.length(); i++) {
                    JSONObject c = array.getJSONObject(i);
                    String holidayDate = c.getString(TAG_HOLIDAYDATE);
                    String holidayName = c.getString(TAG_HOLIDAYName);
                    String holidaytype = c.getString(TAG_HOLIDAYtype);

                    HashMap<String, String> customers = new HashMap<String, String>();

                    customers.put(TAG_HOLIDAYDATE, holidayDate);
                    customers.put(TAG_HOLIDAYName, holidayName);
                    customers.put(TAG_HOLIDAYtype, holidaytype);
                    arrayList.add(customers);
                }

                getHolidaylistAdapter.notifyDataSetChanged();
            }

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        } else {
                            utility.hideProgressDialog();
    }
                } catch (IOException e) {
                            e.printStackTrace();
            }
            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.i("ErrorResponsestring", call.toString());
            }
        });
    }
String JSONURL = "https://demonuts.com/Demonuts/JsonTest/Tennis/";
    @GET("json_parsing.php")
    Call<ResponseBody> getString();
//    @POST("getProspectList")
//    @FormUrlEncoded
//    Call<ResponseBody> getProspectList(@FieldMap HashMap<String, String> body);
 implementation 'com.squareup.retrofit2:retrofit:2.0.2'
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    implementation 'com.squareup.okhttp3:okhttp:4.0.0'