从webservice收到数据后启动新的Activity

时间:2013-08-21 10:37:59

标签: android android-asynctask invoke

我有以下问题:

在我的活动中,我调用了一个Web服务。很快,当收到数据时,我想要开始下一个活动。就像现在一样,活动在我调用AsyncTask后直接启动。

这就是它的样子:

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

detailList是一个ArrayList,它在onPostExecute()的{​​{1}}中获取它的数据。

我尝试了一些AsyncTask,在boolean finished=false;中生效并将onPostExecute()放入

startActivity

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

那么在收到所有数据之前,我怎么能等待while(!finished){ try{ wait(500); }catch(Exception e){ } 等待?因为我获得startActivity(),因为我在DataTableCreater活动中NullPointerException

我看了this,但对我来说没有任何帮助。

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

编辑1

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

2 个答案:

答案 0 :(得分:1)

您开始新活动的代码

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

应该是AsyncTask的onPostExecute()方法

答案 1 :(得分: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的标志,然后检查两者的值,如果两者都是真的那么只有你可以开始你的活动