2011-08-16 17 views
0

複雑なバックグラウンド操作(送信するログファイルのコンパイル)を処理するAsyncTaskを使用しており、ProgressDialogを使用してユーザーの進行状況を表示しています。私はshowDialog()を使ってみましたが、それは決して表示されない(それは決して呼び出されません)ように思われ、それを行う方法についてのチュートリアルに続きました... 私は管理されていないものを使用しています。 。私はまた、ログファイルをコンパイルし始めるときにメッセージを更新したいと思っています(それが遅れているか、テキストビューが本当に長くて、想定されているように更新されません)。AsyncTaskのProgressDialogが更新または破棄されない

コードを少し動かして問題が発生したように見える(onProgressUpdate()など)が、動作させる方法がわかりません。私はこのサイトの周りを見て、何も私は(まったくとにかくではない)問題を抱えているようだ。 RunOnUiThread()が動作しない、新しいThread(){}が動作しない、onProgressUpdate()が動作しない(ドキュメントが混乱している)

これも決して解雇されません。私はリスナーを設立したことはありません。

誰かが自分のコードに間違いがあることを知っていますか?私はAsyncTaskがシンプルであると考えていた。

 private class BuildLogTask extends AsyncTask<Void, Void, String> { 
     String temp; 
     ProgressDialog progressdialog = new ProgressDialog(context); //variable is defined at onCreate (held as private, not static) 

     @Override 
     protected String doInBackground(Void... params) { 
      temp = buildLog(); 
      logdata = temp; 
      publishProgress(); 
      createLogFile(); 
      return temp; 
     } 

     protected void onProgressUpdate() { 
      progressdialog.setMessage("Compiling Log File..."); 
     } 

     @Override 
     protected void onPreExecute() { 
      Log.w(TAG,"Showing Dialog"); 
      send.setEnabled(false); 
      ProgressDialog progressdialog = new ProgressDialog(context); 
      progressdialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      progressdialog.setMessage("Gathering Data..."); 
      progressdialog.setCancelable(false); 
      progressdialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 

       @Override 
       public void onDismiss(DialogInterface dialog) { 
        Log.e(TAG,"Progress Dialog dismissal."); 

       } 
      }); 
      progressdialog.show(); 
     } 

     @Override 
     protected void onCancelled(){ 
      Log.e(TAG,"Progress Dialog was Cancelled"); 
      progressdialog.dismiss(); 
      logdata=null; 
     } 

     @Override 
     protected void onPostExecute(String result) { 
      progressdialog.dismiss(); 
      send.setEnabled(true); 
      previewAndSend(); 
     } 

    } 

答えて

2

あなたがそこに二つの異なる進捗ダイアログを持って、地元の1 onPreExecute()と1つのグローバル。あなたのonPostExecution()で却下したものは、実際には表示されなかったグローバルなものです。ローカル宣言を削除しても問題ありません。

progressdialog.show(); 

を::

progressdialog = progressdialog.show(); 

幸運

+0

うん...それはそれでした。 私は今や気分が悪いです!しかし、ありがとう! – Mgamerz

0

2つの問題があります。

  1. onProgressUpdateの署名が正しくありません。代わりにこれを試してみてください:

    @Override 保護のボイドonProgressUpdate(ボイド...進捗状況を){ progressdialog.setMessage( "コンパイルログファイル...");あなたはonPreExecute(内のローカル変数でprogressDialogのメンバ変数をマスキングしている }

EDIT:識別された第2の問題:

+0

残念ながら、(私が試した他のすべての方法のように)それは動作しません。進捗ダイアログのメッセージは更新されず、それ自体も却下されません。 – Mgamerz

+0

うーん...それは変です。 ProgressのパラメータタイプをVoidからIntegerに変更しようとしましたか(上記の編集で詳しく説明されています) – Jason

+0

あなたの問題があります。あなたは 'onPreExecute()'のローカル変数で 'progressDialog'メンバ変数をマスクしています – Jason

0

置き換え、それを試してみてください。

関連する問題