在Android上从远程数据库翻译字符串的正确方法是什么?

时间:2016-05-22 21:00:15

标签: android json android-volley google-translate microsoft-translator

我尝试过谷歌翻译和微软翻译。两者都给出错误:

  

[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 []

0 个答案:

没有答案