Android 从webservice接收数据后启动新活动

Android 从webservice接收数据后启动新活动,android,android-asynctask,invoke,Android,Android Asynctask,Invoke,我有以下问题: 在我的活动中,我调用一个Web服务。收到数据后,我希望尽快开始下一个活动。现在,在我调用我的AsyncTask之后,活动就直接开始了 这就是它的样子: new PositionRequest().execute(lineNr); Intent intent = new Intent(this, DataTableCreater.class); intent.putExtra("RequestData", detailList); startActivity(i

我有以下问题:

在我的活动中,我调用一个Web服务。收到数据后,我希望尽快开始下一个活动。现在,在我调用我的
AsyncTask
之后,活动就直接开始了

这就是它的样子:

new PositionRequest().execute(lineNr);
Intent intent = new Intent(this, DataTableCreater.class);
intent.putExtra("RequestData", detailList);
startActivity(intent);
detailList
是一个ArrayList,它获取
AsyncTask
onPostExecute()
中的数据

我尝试了一些
boolean finished=false
,它在
onPostExecute()
中变为true,并将
startActivity
放入

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

}
循环,这当然不是一个好的解决方案。如果调用失败,我将陷入一个无休止的循环中

那么,如何让我的
startActivity()
等待,直到收到所有数据?因为否则,我会得到一个
NullPointerException
,因为我在DataTableCreater活动中的
意图.getStringArrayExtra()

我看了一眼,但对我毫无帮助

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

编辑1


我忘了添加,我需要在AsyncTask之外启动活动,因为我有第二个并行运行的线程。在开始活动之前,我需要完成这两项工作。两个任务完成所需的时间大致相同,因此我无法确定哪一个先完成,然后从另一个异步任务开始活动。

启动新活动的代码

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

应该在AsyncTask的
onPostExecute()
方法中

我正在使用它,它对我来说运行良好

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;
        }
    }
private类关闭扩展异步任务
{
语境;
进展性帕金森病;
关闭(上下文)
{
mContext=上下文;
pd=新建进度对话框(mContext);
} 
受保护的void onPreExecute()
{
pd.setTitle(“请稍候…”);
pd.setMessage(“加载…”);
pd.可设置可取消(假);
pd.show();
} 
受保护的void onPostExecute(布尔结果)
{
如果(结果)
{
Intent Intent=新的Intent(这是DataTableCreater.class);
intent.putExtra(“请求数据”,详细列表);
星触觉(意向);
}
如果(pd.isShowing())pd.discouse();
} 
@凌驾
受保护的布尔doInBackground(Void…params)
{
返回true;
}
}
希望这对你有帮助

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

您当然是对的。我忘了添加,我需要在AsyncTask之外启动活动,因为我有第二个并行运行的线程。在开始活动之前,我需要完成这两项工作。两者完成所需的时间大致相同,所以我不能说哪一个先完成,然后从另一个任务开始活动。对不起,我应该首先提供这些信息。