0

我有以下问题:

在我的活动中,我调用了一个 Web 服务。一旦收到数据,我就想开始下一个活动。就像现在一样,活动在我调用我的AsyncTask.

这是它的样子:

new PositionRequest().execute(lineNr);
Intent intent = new Intent(this, DataTableCreater.class);
intent.putExtra("RequestData", detailList);
startActivity(intent);

detailList是一个 ArrayList,它onPostExecute()AsyncTask.

我尝试了一些,boolean finished=false;这在onPostExecute()startActivity

while(!finished){
try{
 wait(500);
 }catch(Exception e){

}

循环,这当然不是一个好的解决方案。如果调用失败则结束,我陷入了无限循环。

那么我怎样才能startActivity()等待,直到收到所有数据?因为否则我会得到一个NullPointerException, 因为我intent.getStringArrayExtra()在 DataTableCreater 活动中。

我看了一下这个,但这对我没有帮助。

如果您需要更多代码或信息,请在评论中告诉我,我会添加它们。

编辑 1

我忘了补充,我需要在 AsyncTask 之外启动活动,因为我有第二个线程并行运行。在我开始活动之前,我需要完成两者。两者都需要大约相同的时间来完成,所以我不能说哪个先完成,然后从另一个 AsyncTask 开始活动。

4

2 回答 2

1

我正在使用它,它对我来说很好用

private class Off extends AsyncTask<Void, Void, Boolean> 
    {
        Context mContext;

        ProgressDialog pd;

        Off(Context context)
        {
            mContext = context; 
            pd = new ProgressDialog(mContext);

        } 
        protected void onPreExecute() 
        {
            pd.setTitle("Please Wait...");
            pd.setMessage("Loading ...");
            pd.setCancelable(false);
            pd.show();
        } 
        protected void onPostExecute(Boolean result)
        {
            if(result)
            {
                Intent intent = new Intent(this, DataTableCreater.class);
                intent.putExtra("RequestData", detailList);
                startActivity(intent);  
            }

            if(pd.isShowing()) pd.dismiss();
        } 

        @Override
        protected Boolean doInBackground(Void... params) 
        {
            return true;
        }
    }

希望对你有帮助

根据您的第一次编辑: 我认为您应该使用您的偏好。你应该优先放置两个 asynctask 的标志,然后检查两者的值,如果两者都为真,那么只有你可以开始你的活动

于 2013-08-21T10:47:18.560 回答
1

您开始新活动的代码

Intent intent = new Intent(this, DataTableCreater.class);
intent.putExtra("RequestData", detailList);
startActivity(intent);

应该在onPostExecute()您的 AsyncTask 的方法中

于 2013-08-21T10:41:13.193 回答