我有以下问题:
在我的活动中,我调用了一个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开始活动。
答案 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的标志,然后检查两者的值,如果两者都是真的那么只有你可以开始你的活动