2013-03-22 88 views
0

我有一些代碼在AsyncTask中做了一些處理,但是這是在運行,我想顯示一個進度對話框。在很多時候,我都希望更新消息,但我遇到了一些麻煩。繼承人是我到目前爲止有:Android:AysncTask中的進度對話框錯誤

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

    private ProgressDialog progressSpinner; 

     @Override 
     protected void onPreExecute() { 
     ProgressDialog progressSpinner = new ProgressDialog(MainActivity.this); 
     progressSpinner.setTitle("File Download"); 
     progressSpinner.setMessage("Connecting to Internet"); 
     progressSpinner.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) 
     { 
      Log.v("doInBackground","1"); 
      try { 
       Log.v("doInBackground","2"); 
       onProgressUpdate("Downloading File"); 
       //do some stuff 
      } catch (IOException e) { 
       result = "Error"; 
      } 

      onProgressUpdate("Complete!"); 
      SystemClock.sleep(300); 
      return null; 
     } 

     protected void onProgressUpdate(String... values) 
     { 
     Log.e("onProgressUpdate",values[0]); 
     try{ 
     progressSpinner.setMessage(values[0]); 
     }catch(Exception e){Log.e("onProgressUpdate","Error!");} 
     Log.e("onProgressUpdate","Success!"); 
     } 

     @Override 
     protected void onPostExecute(Void result) 
     { 
     progressSpinner.dismiss(); 
     vf.showNext(); 
     } 
} 

,我希望將有更新的消息不工作的代碼,它只是拋出一個異常。然後,當我嘗試關閉進度對話框時,整個事件崩潰。

我對android開發很新,所以我非常感謝任何指針。

Logcat條目,它都有點梨形。

03-22 22:59:30.189: W/dalvikvm(8133): threadid=3: thread exiting with uncaught exception (group=0x4001b188) 
03-22 22:59:30.189: E/AndroidRuntime(8133): Uncaught handler: thread main exiting due to uncaught exception 
03-22 22:59:30.195: E/AndroidRuntime(8133): java.lang.NullPointerException 

--UPDATE--

看來,我的問題是,我已經宣告進度對話框。我終於想通了,我可以在一個新創建的構造申報進度對話框像這樣

progressSpinner = new ProgressDialog(mContext); 

那麼它將允許的的AsyncTask類訪問的所有其他方法來更新消息。

+0

看看我的答案 – Droidman 2013-03-22 23:40:30

回答

2

問題可能是您在創建ProgressDialog時引用MainActivity的方式。公共構造添加您AsyncTask並命名mContext類字段設置爲:在您的MainActivity

 public ShowDialogAsyncTask(Context c){ 
      mContext = c; 
     } 

this同時創造你的類的對象:在你的AsyncTask

  ShowDialogAsyncTask task = new ShowDialogAsyncTask(this); 

,創建ProgressDialog使用上下文

+0

仍然導致相同的錯誤 – cosmicsafari 2013-03-22 23:45:28

+0

請發佈一些更多的LogCat輸出,如果可能 – Droidman 2013-03-22 23:50:42

+0

如果沒有完整的代碼,很難說出這裏有什麼問題,但是可以看看我如何使用AsyncTask來下載圖像並顯示進度http://stackoverflow.com/questions/15549421/how-to-下載並保存一個圖像在Android – Droidman 2013-03-23 00:00:54