Как использовать Google Translate API v2 с Android

Я пытаюсь создать приложение-переводчик для Android с помощью Google Translation Api ("google-api-services-translate-v2-rev48.1.22.0.jar).

Мне удалось получить действительный ключ, и я протестировал его из простого Java-проекта, и все работает отлично. Но когда я пытаюсь использовать тот же код в приложении для Android, ничего не получается.

Это код с Android:

Translate translator = new Translate.Builder (new NetHttpTransport(), GsonFactory.getDefaultInstance(), null)
                .setApplicationName("MyAppName")
                .build();
  try {
            TranslationsListResponse response = getListOfParameters(fromLanguage, toLanguage, textToTranslate).execute();
            StringBuffer sb = new StringBuffer();
            for (TranslationsResource tr : response.getTranslations()) {
                sb.append (tr.getTranslatedText() + " ");
            }
            return sb.toString();
        }
        catch (IOException e) {
            Log.e("ERROR", "Got error while trying to translate");
        }

private Translate.Translations.List getListOfParameters (String fromLanguage, String toLanguage, String textToTranslate) throws IOException {
        Translate.Translations.List list = translator.new Translations().list (Arrays.asList(textToTranslate), toLanguage.toUpperCase());
        list.setKey (TranslatorManager.TRANSLATION_GOOGLE_API_KEY);
        list.setSource (fromLanguage.toUpperCase());

        return list;
    }

Я не знаю точно, где проблема. Единственное, что я получаю, когда пытаюсь перевести это:

I/System.out: (HTTPLog)-Static: isSBSettingEnabled false
I/System.out: KnoxVpnUidStorageknoxVpnSupported API value returned is false

В андроиде пробовал сcom.google.api.client.http.javanet.NetHttpTransport() а также AndroidHttp.newCompatibleTransport(),

В моем первоначальном проекте Java, я использовал GoogleNetHttpTransport.newTrustedTransport(), но при использовании его в Android, я получил некоторые исключения:

java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore JKS implementation not found

1 ответ

Решение требует изменения используемого HTTP-транспорта, как пишет Ник. Два решения, предложенные в связанной ветке "[stackru.com/a/39285052/322738 - Rafael Steil][1]", в некоторой степени эквивалентны и будут работать аналогичным образом при определенных условиях.

В первом ответе рекомендуется использовать HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();

тогда как второй: HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport();

В [документации][2] для класса AndroidHttp в последнем абзаце "Сведения о методе" говорится, что начиная с версии Android для Gingerbread, рекомендуется вызывать "new com.google.api.client.http.javanet.NetHttpTransport ();".

Метод newCompatibleTransport () класса AndroidHttp возвращает новый потокобезопасный транспортный экземпляр HTTP, который совместим с Android SDK до Gingerbread.

Другие вопросы по тегам