Как правильно переводить строки из удаленной базы данных на Android?
Я пробовал Google Translate и Microsoft Translator. Оба дают ошибку:
[microsoft-translationator-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);
Я видел другие SO вопросы, касающиеся Translate API на Android, но все они ссылались на просмотр, чтобы получить перевод. Я не нашел ничего, что приводит пример перевода строкового ответа JSON из запроса Volley. Есть идеи? Каков был бы правильный способ сделать это без перегрузки основного потока?
ЗА КОММЕНТАРИИ НИЖЕ Я добавил этот класс 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());
Глядя на API Google и Microsoft Translator, им требуется строка []