我尝试过谷歌翻译和微软翻译。两者都给出错误:
[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(位置).getName());
查看Google和Microsoft Translator API,它们需要String []