Как правильно переводить строки из удаленной базы данных на 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, им требуется строка []

0 ответов

Другие вопросы по тегам