AsyncTask /或Thread导致列表视图行仅在滚动时填充值

时间:2017-01-21 21:37:54

标签: java android multithreading android-asynctask

我的应用包含自定义列表视图,每行包含文字。

我的MainActivity puts已翻译的字符串被称为feedData的HashMap,由CustomListView Class检索,其中每行设置TextView

关于我的自定义列表视图的一切都表现完美。我收到此错误是因为我正在实施Google API转换,这迫使我使用AsyncTask或Thread。这些值会填充到每一行,但仅限于我向上和向下滚动。

MainActivity

  TranslateString(feedText, feedData);
  arrayFeedList.add(feedData);

翻译字符串方法:

 public void TranslateString(final String mText, final HashMap<String, String> mList) {



                    AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
                        @Override
                        protected Void doInBackground(Void... voids) {

                            try {
                                Translate translate = TranslateOptions.builder().setApiKey("AIzaSyB7cCDBbeoZ2tYTH-Ynv25OaPraLmTG7Hw").build().getService();
                                Translation translation =
                                        translate.translate(
                                                mText,
                                                TranslateOption.sourceLanguage("tr"),
                                                TranslateOption.targetLanguage("en"));
                                returnedString = translation.getTranslatedText();

                                check = 1;

                            } catch (Exception e) {
                                 check = 2;

                            }

                            return null;
                        }
                        @Override
                        protected void onPostExecute(Void result) {
                            if(check == 1){
                                mList.put("feed", returnedString);
                            }
                            else if(check == 2){
                                mList.put("feed", mText + " " + getContext().getString(R.string.translationfailed) + " in catch");
                            }
                        }
                    };
                    asyncTask.execute();       
    }
   }

1 个答案:

答案 0 :(得分:0)

在我的MainActivity中执行此操作修复了我的问题:(完全删除AsyncTask方法后)

   if (android.os.Build.VERSION.SDK_INT > 9)
    {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }