Retforit无法解码响应

时间:2019-09-16 18:13:53

标签: android retrofit2

当我向服务器发送请求时,此响应返回:

{"data":{"id":19,"slug":"\u0645\u0646-\u0647\u0631-\u0639\u0644\u0645-\u0627\u0632-\u0641\u0642\u0637-\u0641\u06cc-5","category_id":3,"title":"\u0645\u0646 \u0647\u0631 \u0639\u0644\u0645 \u0627\u0632 \u0641\u0642\u0637 \u0641\u06cc","needtype":1,"price":366,"city":"\u0634\u0627\u0647\u0631\u0648\u062f","description":"\u0633\u06cc\u062f \u0642\u0648 \u0627\u0648","connection":1,"answer_time":null,"immidiatetype":0,"university":"\u062f\u0627\u0646\u0634\u06af\u0627\u0647 \u0635\u0646\u0639\u062a\u06cc \u0634\u0627\u0647\u0631\u0648\u062f","image1":null,"image2":null,"counter":1,"phone":"09055064918","telegram":"qqqqqu","fake_id":"kHJbalwj2Z","created_at":"\u06f1\u06f3\u06f9\u06f8-\u06f0\u06f6-\u06f1\u06f9 \u06f1\u06f9:\u06f2\u06f4","destination":"\u0645\u0646\u062a","gender":"1","car_type":"\u0641\u0631\u06cc\u062f \u0628\u06cc\u0633\u062a \u0639\u062f\u062f","car_brand":"\u0647\u06cc\u0641\u0627 \u0628\u06cc\u0637\u0631\u0641\u06cc","number":"2","date_hour":"\u0645\u062f \u062a\u0627 \u0627\u0632 \u0644\u0698 \u0628\u06cc","date_day":"988","like":false}}

但真正的输出是:

{
    "data": {
        "id": 19, 
        "category_id": 3, 
        "needtype": 1,
        "price": 366, 
        "connection": 1,
        "answer_time": null,
        "immidiatetype": 0, 
        "image1": null,
        "image2": null,
        "counter": 1,
        "phone": "09055064918",
        "telegram": "qqqqqu",
        "fake_id": "kHJbalwj2Z", 
        "gender": "1", 
        "number": "2", 
        "date_day": "988",
        "like": false
    }
}

Api:

@POST("/api/teezer/{cat}/{slug}")
Call<ResponseBody> getSpecificTraining(@Path("cat") int Category, @Path("slug") String slug);

我的服务:

public static <S> S createService(
        Class<S> serviceClass, final String authToken) throws KeyManagementException, NoSuchAlgorithmException {
    AuthenticationInterceptor interceptor = null;
    if (!TextUtils.isEmpty(authToken)) {

        interceptor = new AuthenticationInterceptor(authToken);

        if (!httpClient.interceptors().contains(interceptor)) {
            httpClient.addInterceptor(interceptor);

            builder.client(httpClient.build());
            retrofit = builder.addConverterFactory(ScalarsConverterFactory.create()).build();
        }
    }
    return createServiceHttps(serviceClass, interceptor, null);
}

最后是我的请求正文:

    Call<ResponseBody> calls = loginService.getSpecificTraining(Integer.parseInt(cat), slug);
    Log.e(">> Url: ", calls.request().url() + " ");
    int finalImage = image;
    calls.enqueue(new Callback<ResponseBody>() {
        @Override
        public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            Log.e(">> onResponse:", String.valueOf(response.code()));
            if (response.isSuccessful()) {
                assert response.body() != null;
                Log.e(">> Response message: ", response.message() + " ");

                try {
                    String data = response.body().string();
                } catch (IOException e) {
                    e.printStackTrace();
                }

            }
        }

        @Override
        public void onFailure(Call<ResponseBody> call, Throwable t) {
        }
    });

程序似乎无法解码响应。有什么解决方案?

1 个答案:

答案 0 :(得分:1)

响应是正确的,只是字符已转义。

尝试this解决方案。