我试过谷歌翻译和微软翻译。两者都给出错误:
[microsoft-translator-api] 检索翻译时出错:null
原因:android.os.NetworkOnMainThreadException
我已经根据参考资料和教程设置了所有内容。唯一的区别是,我不是在单击按钮时调用 Translate.execute(),而是在 JSON 字符串数据开始进入时调用它。
这是我所拥有的:
在我的数据模型类中
public String getName() throws Exception {
String trans = Translate.execute(prod_name, Language.ENGLISH, Language.fromString(Locale.getDefault().getLanguage()));
return trans;
}
我也试过这个:
在我的数据模型类中
public String getName(){
return prod_name;
}
除此之外:
主要活动
JsonArrayRequest request = new JsonArrayRequest(FEAT_URL,
new Response.Listener<JSONArray>() {
@Override
public void onResponse(JSONArray response) {
Log.d(TAG, response.toString()); try {
for(int i=0;i<response.length();i++){
String pid=response.getJSONObject(i).getString("pid");
String name=response.getJSONObject(i).getString("prod_name");
String img = response.getJSONObject(i).getString("prod_pic");
String lang = Locale.getDefault().getLanguage();
Log.d("Response: ", name);
String trans = Translate.execute(name, Language.SPANISH, Language.fromString(lang));
fdata.add(new FeaturedModel(pid, trans, img));
}
} catch (Exception e) {
e.printStackTrace();
} featAdapt=new FeaturedAdapter(MainActivity.this, fdata);
pageView.setAdapter(featAdapt);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d(TAG, "Error: " + error.getMessage());
}
});
VolleyController.getInstance().addToRequestQueue(request, TAG);
我在 Android 上看到过有关 Translate API 的其他 SO 问题,但所有这些问题都提到单击视图以获取翻译。我还没有找到任何可以提供从 Volley 请求翻译 JSON 字符串响应的示例。有任何想法吗?在不重载主线程的情况下执行此操作的正确方法是什么?
根据下面的评论 ,我已将此 AsyncTask 类添加到我的 MainActivity:
class TranslateAsync extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... inTxt) {
try {
String lang = Locale.getDefault().getLanguage();
translatedText = Translate.execute(inTxt, Language.fromString(lang));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.e("Translate Error", e.toString());
}
return null;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
}
}
现在得到一个错误,它无法在我的适配器类的这一行上解析方法 setText(String[]):
holder.ftitle.setText(feature.get(position).getName());
查看 Google 和 Microsoft Translator API,它们需要 String[]