Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当工作需要线性完成时使用ASyncTask_Android_Android Asynctask - Fatal编程技术网

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

Android 当工作需要线性完成时使用ASyncTask,android,android-asynctask,Android,Android Asynctask,我有工作需要按以下顺序完成: 在主要活动中: -显示进度对话框 -从web获取和解析XML -取消对话框 -切换到在第一个活动中使用已解析XML中的数组的ListView活动 我的问题是,因为我在ASyncTask(主要活动)中进行获取/解析工作 立即尝试加载新活动,甚至需要先完成获取/解析工作,因为它获取listView(新活动)的数据。如何确保在ASyncTask工作完成之前不会加载新活动 以下是我正在使用的示例: public void onCreate(Bundle savedIn

我有工作需要按以下顺序完成:

在主要活动中: -显示进度对话框 -从web获取和解析XML -取消对话框 -切换到在第一个活动中使用已解析XML中的数组的ListView活动

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

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

   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完成并且对话框在运行之前被取消,因为它首先需要天气数据来填充列表视图。

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