Java Android settext未在runOnUiThread或asynctask中的onPostExecute中更新textview

Java Android settext未在runOnUiThread或asynctask中的onPostExecute中更新textview,java,android,multithreading,android-asynctask,textview,Java,Android,Multithreading,Android Asynctask,Textview,我试图在runOnUiThread或asynctask中的onPostExecute中更新textview,但它没有更新 在onCreate中,我正在初始化全局变量\u tvs中的所有文本视图 _tvs.add((TextView) findViewById(R.id.maxCholTextView)); _tvs.add((TextView) findViewById(R.id.maxFatTextView)); _tvs.add((TextView) findViewById(R.id.ma

我试图在runOnUiThread或asynctask中的onPostExecute中更新textview,但它没有更新

在onCreate中,我正在初始化全局变量\u tvs中的所有文本视图

_tvs.add((TextView) findViewById(R.id.maxCholTextView));
_tvs.add((TextView) findViewById(R.id.maxFatTextView));
_tvs.add((TextView) findViewById(R.id.maxSaturatedFatTextView));
_tvs.add((TextView) findViewById(R.id.maxFiberTextView));
_tvs.add((TextView) findViewById(R.id.maxSaltTextView));
_tvs.add((TextView) findViewById(R.id.maxCalTextView));
_tvs.add((TextView) findViewById(R.id.maxCarbTextView));
_tvs.add((TextView) findViewById(R.id.maxSugarTextView));
_tvs.add((TextView) findViewById(R.id.maxProteinTextView));
然后我尝试了三种不同的方法来更新它。在第一种方式中,我尝试从doInBackGround函数调用它,并在runOnUiThread中设置文本。在第二个选项中,我删除了runOnUiThread代码,并从onPostExecute调用了updateView。 第三个选项是我将settext放在runOnUiThread代码之外,如下面所示。这用于初始化它,当活动从另一个线程启动时更新它,但当用户按下“后退”按钮时活动恢复时崩溃。崩溃的原因是,只有创建视图层次结构的原始线程才能接触其视图。我不知道为什么它在初始化时不抱怨,在另一个活动调用启动活动时更新,但在活动恢复时更新

private class DatabaseLogger extends AsyncTask<String, String, Void> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();

        }

        @Override
        protected Void doInBackground(String... type) {
            // TODO Auto-generated method stub

                updateView();
            }

        @Override
        protected void onPostExecute(Void result) {
            super.onPostExecute(result);

            //updateView();
        }

        private void updateView() {
            int progress;

            // proteins, carbs, sugars, fats, cals, cholesterol, salt
            if (_current != null && _diet != null && _diet.size() > 0 && _current.size() > 0) { 

                for (int i = 0; i < _pbs.size(); i++) {
                    final ProgressBar pb = _pbs.get(i);
                    final Float current = _current.get(i);
                    final TextView tv = _tvs.get(i);

                    Float diet = _diet.get(i);

                    progress = Math.round(((current / diet)) * 100);

                    int y = 50 + (int) (progress * 3.9); 

                    if (y > 400)
                        y = 400; // Cap is 400


                    // If I put this code inside the runOnUiThread the textView doesnt update
                    tv.setY(-y);
                    tv.setText("" + Math.round(current));


                    final int finalProgress = progress;
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            pb.setMax(50);
                            pb.setProgress(20);
                            pb.setProgress(0);
                            pb.setMax(100);
                            pb.setProgress(finalProgress); // Force update -> Its an android bug thats not fixed yet http://stackoverflow.com/questions/4348032/android-progressbar-does-not-update-progress-view-drawable

                        }
                    });

                }
            } else if (_current == null || _current.size() == 0) {
                reInitPbs();
            }
        }

        private void reInitPbs() {
            for (int i = 0; i < _pbs.size(); i++) {
                final ProgressBar pb = _pbs.get(i);
                final TextView tv = _tvs.get(i);

                tv.setY(-50);
                tv.setText("" + 0);


                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        pb.setMax(50);
                        pb.setProgress(20);
                        pb.setProgress(0);
                        pb.setMax(100);
                        pb.setProgress(0); // Force update -> Its an android bug thats not fixed yet http://stackoverflow.com/questions/4348032/android-progressbar-does-not-update-progress-view-drawable

                    }
                });
            }
        }
    }

任何帮助都将不胜感激。我一直在浏览问题和答案,但仍然没有找到解决问题的方法。谢谢大家!

您可以使用
onProgressUpdate
从AsyncTask
doInBackground
更新UI,此方法将由android在主(UI)线程上运行。参考资料:@bipinavailu我已经试过了,就像我在问题中说的那样。这仍然不起作用。您可以使用
onProgressUpdate
从AsyncTask
doInBackground
更新UI,此方法将由android在主(UI)线程上运行。参考资料:@bipinavailu我已经试过了,就像我在问题中说的那样。这仍然不起作用。
@Override
    public void onResume() {  // After a pause OR at startup
        super.onResume();

        if (_user != null) {
            ImageView avatarView = (ImageView) findViewById(R.id.avatarView);

            int id = getApplicationContext().getResources().getIdentifier(_user.getAvatar().getType().toString().concat(_user.getAvatar().getStatus().toString()).toLowerCase(), "drawable", getApplicationContext().getPackageName());

            avatarView.setImageResource(id);

            setFeedbackMessage();

            getDataFromDatabase("overview", "");
        }
    }