2011-12-03 155 views
2

我目前有一個asyncTask它在preexecute上開始一個加載欄,在後臺發送一些東西到服務器,並在後執行取消對話框,並啓用一個按鈕。但是,由於doInBackground返回null,我的post執行沒有執行。我試圖弄清楚我可以做些什麼讓postExecute運行。有任何想法嗎?感謝Android - 在後臺執行在AsyncTask

代碼:

class DatabaseAsync extends AsyncTask<Void,Void,Void>{ 
     @Override 
     protected void onPreExecute(){ 
      dialog = ProgressDialog.show(MainFeedActivity.this, null, "Posting..."); 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 
      Log.d(TAG, "send to databse"); 
      SendToDatabase(); 
      Log.d(TAG, "sent to database - DONE"); 

      //dialog.dismiss(); 

      //sendButton.setEnabled(true); 

      return null; 
     } 

     protected void onPostExecute(){ 
      Log.d(TAG, "p execute"); 
      dialog.dismiss(); 
      sendButton.setEnabled(true); 
      Log.d(TAG, "done executing"); 
     } 

    } 

回答

5

這是完全可以從doInBackground()在你的情況下返回null。只要確保onPostExecute()看起來是這樣的:

@Override 
protected void onPostExecute(Void result) { 
    Log.d(TAG, "p execute"); 
    dialog.dismiss(); 
    sendButton.setEnabled(true); 
    Log.d(TAG, "done executing"); 
} 
+2

只是爲了澄清。沒有調用onPostExecute的原因是因爲它在DatabaseAsync類中根本沒有實現。相反,作者使用零參數在DatabaseAsync中實現了一個方法。這當然不會被執行,因爲它被認爲是完全不同且重載的方法。看看http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute(結果) –

+0

上的JavaDoc非常感謝Arhimed的幫助,我非常感謝。 – Splitusa

0

改變你的DatabaseAsync類是這樣的:

class DatabaseAsync extends AsyncTask<String, Void, String>{ 

     protected void onPreExecute(){ 
       dialog = ProgressDialog.show(MainFeedActivity.this, null, "Posting..."); 
     } 


     protected String doInBackground(String... arg0) { 
      Log.d("TAG", "send to databse"); 

      Log.d("", "sent to database - DONE"); 


      //dialog.dismiss(); 

      //sendButton.setEnabled(true); 

      return null; 
     } 

     protected void onPostExecute(String result){ 
      Log.d("TAG", "p execute"); 
      dialog.dismiss(); 

      Log.d("TAG", "done executing"); 
     } 

閱讀此鏈接後的代碼工作http://www.vogella.de/articles/AndroidPerformance/article.html