我正在尝试使用Google Translation Api("google-api-services-translate-v2-rev48.1.22.0.jar)制作Android翻译应用程序。
我设法获得了一个有效的密钥,并且我已经从一个简单的Java项目中对其进行了测试,一切都很完美。但是,当我尝试在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
正如Nick所写,该解决方案需要更改使用的HTTP传输。链接线程"[stackoverflow.com/a/39285052/322738 – Rafael Steil][1]"中提出的两种解决方案在某种程度上是等效的,并且在某些条件下会类似地工作。
第一个回复建议使用 HTTP_TRANSPORT = AndroidHttp.newCompatibleTransport();
而第二个:HTTP_TRANSPORT = new com.google.api.client.http.javanet.NetHttpTransport();
AndroidHttp类的[文档][2],在最后一段"方法细节"中指出,从Android版本的Gingerbread开始,建议调用"new com.google.api.client.http.javanet.NetHttpTransport();"。
AndroidHttp 类的方法 newCompatibleTransport() 返回一个新的线程安全 HTTP 传输实例,该实例与 Gingerbread 之前的 Android SDK 兼容。