如何在Android上使用Google Translate API v2

时间:2017-01-08 22:24:37

标签: java android google-api google-translate android-httptransport

我尝试使用Google Translation Api制作Android翻译应用程序(" 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

在Android中,我尝试过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 个答案:

答案 0 :(得分:1)

该解决方案需要更改所使用的HTTP传输,正如尼克所写。链接线程“[stackoverflow.com/a/39285052/322738 - Rafael Steil] [1]”中提出的两个解决方案在某种程度上是等效的,并且在某些条件下也会起作用。

第一个回复建议使用HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();

而第二个:HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport();

类AndroidHttp的[documentation] [2],在最后一段“方法细节”中指出,从Android版本Gingerbread开始,调用“new com.google.api.client.http.javanet.NetHttpTransport();”被推荐。

AndroidHttp类的newCompatibleTransport()方法返回一个新的线程安全HTTP传输实例,该实例与Gingerbread之前的Android SDK兼容。