2012-05-09 7 views
0

私は長いプロセスをAsyncTask内で実行していますが、処理中にユーザーから何かを確認する必要があるかもしれません。私は確認ダイアログをどのように表示することができるのか知っていますが、出力を取得して使用を確認するまでどのように待機することができますか?AsyncTask内のダイアログ(アラート)を確認します

this.runOnUiThread(new Runnable() { 
      public void run() { 
       boolean output = ConfirmUser(message); 
      } 
     }); 

答えて

3

私はそれは悪い考えです。ユーザーからの確認が必要な場合は、AsyncTaskを2つの部分に分割することをお勧めします。最初に部分を実行してからonPostExecute()ダイアログを表示できます(UIスレッドで実行されているため)。 2番目のAsyncTask。

あなたはまだそれを一AsyncTaskを行いたい場合は、このようにそれを行うことができます。

final BlockingQueue<Boolean> queue = new ArrayBlockingQueue<Boolean>(1); 
this.runOnUiThread(new Runnable() { 
    public void run() { 
     // Assuming you have ConfirmUser method which returns boolean 
     queue.add(ConfirmUser(message)); 
    } 
}); 


Boolean result = null; 
try { 
    // This will block until something will be added to the queue 
    result = queue.take(); 
} catch (InterruptedException e) { 
    // deal with it 
} 
+0

パーフェクト!おかげで、AsyncTaskを分割することは現行の設計では不可能ですが、可能であれば、より良いアプローチが必要と考えられます。 – xmen

+0

InterruptedExceptionがスローされるときに尋ねるべきことが1つありますか? – xmen

+0

+1すてきな答え! – yorkw

関連する問題