2013-07-05 82 views
-4

執行方法,我有一個問題,我寫了這樣的代碼如何等待Android中

 
private class SomeClass extends AsyncTask { 
    @Override 
    protected void onPreExecute() { 
      super.onPreExecute(); 
      pDialog = new ProgressDialog(CheckOutActivity.this); 
      pDialog.setMessage(getText(R.string.wait)); 
      pDialog.setIndeterminate(false); 
      pDialog.setCancelable(true); 
      pDialog.show(); 
     } 
    @Override 
    protected Void doInBackground(Void... arg0) { 
//some code 
} 
@Override 
     protected void onPostExecute(final Void unused) { 
      if (pDialog.isShowing()) { 
       pDialog.dismiss(); 
      } 
     } 
} 
我執行這樣
 
new SomeClass().execute(); 
Toast.makeText(getApplicationContext(), "msg msg", Toast.LENGTH_SHORT).show(); 
類現在我的問題是,當.execute()啓動代碼不一樣等待這意味着麪包一樣完成之前執行SomeClass()。execute();有沒有等待這個.execute()方法的屬性。

編輯:我將一些值賦給全局變量,執行完後我只想比較這個值。所以我只是把吐司消息。

+0

是你的問題,以顯示敬酒時的AsyncTask結束? – Blackbelt

+0

是的,我想在執行後敬酒 –

+0

然後顯示它在onPostExecute – Blackbelt

回答

5

如果您希望在工作完成後顯示Toast邏輯,請將其移動到onPostExecute()

+0

謝謝,我知道這個解決方案。其實我想知道如何等待這個過程 –

+1

如果你會「阻止等待」asynctask完成將不會有用它 – Selvin

+0

你是什麼意思**如何等待**?請詳細說明.... – Gru

0

在異步任務上調用get()將基本上使其不再異步,並將阻止主線程。

從Android文檔

Waits if necessary for the computation to complete, and then retrieves its result.

注意這是不是一個真正的好主意,做,因爲你永遠不應該阻塞主線程。

用法:

new SomeClass().execute().get(); 
+0

謝謝..它如何寫代碼行? –

+0

查看編輯答案。 – triggs

+0

比爲什麼你使用'AsyncTask'?只有避免NetworkOnMTE?使用'get()'就像在自己的腳上拍攝......而不是'new SomeClass()。execute()。get()''你可以在這裏放置'doInBackground'代碼...... – Selvin