Подтвердить что ты не робот

Не удается получить OkHttp response.body.toString(), чтобы вернуть строку

Я пытаюсь получить некоторые json-данные, используя OkHttp, и не могу понять, почему, когда я пытаюсь выполнить регистрацию response.body().toString(), я получаю Results:﹕ [email protected]

try {
        URL url = new URL(BaseUrl);
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .header(/****/)
                .build();

        Call call = client.newCall(request);
        Response response = call.execute();

        **//for some reason this successfully prints out the response**
        System.out.println("YEAH: " + response.body().string());

        if(!response.isSuccessful()) {
            Log.i("Response code", " " + response.code());
        }

        Log.i("Response code", response.code() + " ");
        String results = response.body().toString();

        Log.i("OkHTTP Results: ", results);

Log

Я не знаю, что я делаю неправильно здесь. Как получить строку ответа?

4b9b3361

Ответ 1

У вас есть функция .string() для печати ответа в System.out.println(). Но, наконец, в Log.i() вы используете .toString().

Поэтому, пожалуйста, используйте .string() в теле ответа для печати и получите ответ своего запроса, например:

response.body().string();

Примечание:

  • .toString(): Это возвращает ваш объект в формате строки.

  • .string(): Это возвращает ваш ответ.

Я думаю, что это решит вашу проблему... Правильно.

Ответ 2

На всякий случай кто-то сталкивается с той же странной вещью, что и я. Я запускаю свой код во время разработки в режиме отладки и, по-видимому, с тех пор, как OKHttp 2.4

.. тело реакции - это одноразовое значение, которое может потребляться только один раз

Поэтому, когда в отладочном режиме у инспектора есть вызов "за сценой", тело всегда пустое. См.: http://square.github.io/okhttp/2.x/okhttp/com/squareup/okhttp/Response.html