异步任务没有更新屏幕

时间:2011-04-02 17:30:48

标签: android android-asynctask

我有一个使用asyncTask和progressdialog执行的方法。执行此方法后,它会更改屏幕上的一些内容 - 微调器和文本视图。在我的方法中,我用新数据更新它们。我知道该方法运行正常并且正在按原样运行,因为当我按下微调器上的箭头时,新数据就在其中。在方法内部调用setText()和notifyDataSetChanged() - 这些似乎不会更新屏幕。将notifyDataSetChanged()添加到我的异步任务的onPostExecute()似乎也没有做任何事情。

任何想法出了什么问题?

这是我的代码

myMethod的()

aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item);
                        for(Object tmpObject:objects){
                            aa.add(tmpObject.getName());
                        }
                        spin=(Spinner)findViewById(R.id.spinner);
                        spin.setOnItemSelectedListener(this);
                        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                        spin.setAdapter(aa);
                        aa.notifyDataSetChanged();
                        txt=(TextView)findViewById(R.id.txt);
                        txt.setText("Woohoo!");

我的asyncTask

class loginTask extends AsyncTask<Void, Void, Void> {
    protected void onPreExecute() {
           pd = ProgressDialog.show(login.this, "Logging you in...", "Please wait", true, false); 
          }

    @Override
     protected Void doInBackground(Void... unused) {
         myMethod();
        return null;
     }
        protected void onPostExecute(Void unused) {
         pd.dismiss();




     }
}

为什么在progressdialog完成后屏幕没有更新?如果我不使用asyncTask,它会更新。将notifyDataSetChanged()添加到postexecute也不会做任何事情。

2 个答案:

答案 0 :(得分:8)

doInBackground方法不在UI线程上,因此如果要进行UI更新,则应在onProgressUpdate或onPostExecute中执行。

答案 1 :(得分:2)

doInBackground - 方法将在后台线程上执行,因此不得尝试与UI对象进行交互。你不能在这里执行txt.setText(“Woohoo!”);等