2011-12-03 48 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