API облачного перевода Google с использованием okhttp3

Я разрабатываю приложение для Android, в котором мне нужно преобразовать речь пользователя в текст (с помощью API облачной речи Google), а затем этот текст на другой язык (с помощью API-интерфейса облачного перевода Google).

Теперь,

Я успешно преобразовал речь пользователя в текст, но проблема в том, что при преобразовании этого текста на другой язык я ничего не получаю в теле ответа. Когда я отправляю запрос в API облачного перевода с помощью своего браузера (например, Google Chrome), он возвращается, как ожидалось (показано ниже).

Отправленный мной запрос: https://translation.googleapis.com/language/translate/v2?target=es&key=MY_API_KEY&q=this%20is%20the%20text%20which%20is%20need%20to%20be%20translated

{
"data": {
"translations": [
   {
    "translatedText": "este es el texto que debe ser traducido",
    "detectedSourceLanguage": "en"
   }
  ]
 }
}

Но проблема в том, что когда я отправляю тот же запрос из своего приложения с помощью OkHttp3, он возвращает следующий ответ

Ответ {протокол = h2, код = 200, сообщение =, url = https://translation.googleapis.com/language/translate/v2?target=es&key=MY_API_KEY&q=this%20is%20the%20text%20which%20is%20need%20to%20be%20translated}

body = OkHttp-Selected-Protocol: h2-тип содержимого: приложение / json; charset = UTF-8 разное: Происхождение разное: X-Происхождение разное: Дата референта: Вс, 30 сентября 2018 08:27:40 Сервер по Гринвичу: ESF cache-control: private x-xss-protection: 1; режим = блок параметры x-кадра: SAMEORIGIN параметры-типа x-содержимого: nosniff alt-svc: quic = ": 443"; ma = 2592000; v = "44,43,39,35" OkHttp-Sent-Millis: 1538296059111 OkHttp-Received-Millis: 1538296060590

Зависимость okhttp3 показана ниже

compile 'com.squareup.okhttp3:okhttp:3.11.0'

Мой код для перевода текста показан ниже

private void getTranslation(String url) {
    OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
                .url(url)
                .build();

        client.newCall(request).enqueue(new Callback() {
            @Override
            public void onFailure(Request request, IOException e) {
                Toast.makeText(SpeechService.this, e.getMessage(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(Response response) throws IOException {
                String res = response.body().toString();
                String mess = response.message(); //gets nothing as message response

            }
        });
    }

Примечание. Даже я получаю код 200, но в ответном сообщении все равно ничего нет


person mdadil2019    schedule 30.09.2018    source источник


Ответы (1)


response.message () - это сообщение о статусе HTTP, например «ОК» из 200 ОК. Вы также должны проверить response.code (), который будет числовым. response.body.toString () предназначен для отладки

  @Override public String toString() {
    return "Response{protocol="
        + protocol
        + ", code="
        + code
        + ", message="
        + message
        + ", url="
        + request.url()
        + '}';
  }

Ты хочешь

String res = response.body().string()
person Yuri Schimke    schedule 30.09.2018