2013-08-21 43 views
0

我有以下問題:從webservice收到數據後開始新活動

在我的活動中,我調用了一個web服務。一旦收到數據,我就想開始下一個活動。就像現在一樣,該活動在我打電話給我的AsyncTask後立即開始。

這是它的樣子:

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

detailList是一個ArrayList,是可以獲得它在AsyncTaskonPostExecute()數據。

我嘗試了一些boolean finished=false;,它得到的onPostExecute()真實,把startActivity

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

} 

循環,這是當然的甚至還沒有接近一個很好的解決方案。如果調用失敗,則結束,我陷入無限循環。

所以,我怎麼能有我startActivity()等待,直到得到了接收的所有數據?因爲否則我得到一個NullPointerException,因爲我的intent.getStringArrayExtra()在DataTableCreater活動。

我在this一看,但對我沒有任何幫助。

如果您需要更多的代碼或信息,請在評論中告知我,我將添加它們。

編輯1

我忘了補充一點,我需要啓動的AsyncTask外的活動,因爲我有平行的第二線程。在我開始活動之前,我需要完成這兩件事。兩者都需要大致相同的時間完成,所以我不能說,哪一個先完成,然後從另一個AsyncTask開始活動。

回答

1

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; 
     } 
    } 

希望這將工作正常幫你

按照你的第一編輯: 我認爲你應該使用你的偏好。最好是你應該把兩個asynctask的旗幟,然後檢查兩者的價值,如果兩者都是真的那麼只有你可以開始你的活動

+0

請參閱我的第一個編輯,但是非常感謝 –

+0

查看我更新的答案。 @AndroidRookie – Andrain

1

你開始新的活動

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

應該在你的AsyncTask

+0

你當然是對的。我忘了補充說,我需要在AsyncTask之外啓動活動,因爲我有第二個線程並行運行。在我開始活動之前,我需要完成這兩件事。兩者都需要大致相同的時間完成,所以我不能說,哪一個先完成,然後從另一個AsyncTask開始活動。對不起,我應該首先提供這些信息。 –