当工作需要线性完成时使用ASyncTask

时间:2010-11-15 05:45:54

标签: android android-asynctask

我的工作需要按此顺序完成:

在主要活动中: - 显示进度对话框 - 从Web获取和解析XML -dismiss对话框 - 切换到ListView活动,该活动在第一个活动中使用来自解析的XML的数组

我的问题是因为我在主要活动ASyncTask中进行了提取/解析工作 立即尝试加载新活动,即使我需要首先完成提取/解析工作,因为它获取了listView(新活动)的数据。在ASyncTask工作完成之前,如何确保新的Activity不会加载?

以下是我正在使用的示例:

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    Button submit = (Button) findViewById(R.id.submitButton);

    submit.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {


            EditText text = (EditText) findViewById(R.id.entry);

            input = text.getText().toString();
            input = input.replace(" ", "%20");  //replace spaces with %20 for URL specification         

            WeatherRetrievalTask wt = new WeatherRetrievalTask();
        wt.execute();

            Bundle bun = new Bundle();
            bun.putParcelableArray("in", (Parcelable[])weather);

            Intent myIntent = new Intent(view.getContext(), WeeklyDisplayActivity.class);
            myIntent.putExtras(bun);
            startActivityForResult(myIntent, 0);
        }

    });
}

*忽略此捆绑工作,因为这是我需要提出的另一个问题的主题......

因此startActivityForResult需要等到ASyncTask完成并且对话框在运行之前被解除,因为它首先需要天气数据才能填充列表视图。

1 个答案:

答案 0 :(得分:0)

您应该在ASyncTask中的onPostExecute()中执行“切换到ListView活动”。
不要编写代码,它将在调用execute()之后使用ASyncTask的结果,因为它将在完成asynctask之前执行,asynctask将作为另一个线程使用。
那些需要在其onPostExecute()方法中使用asynctask doinbackground()结果的工作