2013-03-22 86 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