2011-11-15 9 views
0

doInBackgroundのAsyncTaskメソッド内でProgressDialogを実行することができません。それは私に次のエラー与える:AsyncTaskのdoInBackgroundメソッド内でProgressDialogを実行できないのはなぜですか?

ERROR/AndroidRuntime(12986): Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

を、エラーがコードでこの行にある:

final ProgressDialog dialog = ProgressDialog.show(GalleryView.this, "Refresh", "Loading... please wait", true); 

すべてのヘルプははるかに高く評価します。

答えて

1

doinbackgroundはUIスレッド上で実行されないため、UI要素を作成することはできません。 AsyncTaskを実行する前に進捗ダイアログを作成する必要があります。

+0

これは私がやろうとしていることです。私はコードの上にprogressdialogを実行したい。コードが終了すると、ダイアログを閉じ、AsyncTaskを呼び出してUIを更新します。私はこれを達成することができません。 –

1

AsyncTaskコンストラクトは、バックグラウンドスレッド操作とUIスレッド操作を分離することです。 doInBrackgroundの中にUIスレッドには含まれていないので、UI関連のロジックをまったく行うことはできません。これを行う適切な場所は、UIスレッドで実行されるメソッドです。私はそのような場所がonPreExecuteであるあなたの特定の場合を推測しています。

3

onPreExecuteメソッドでprogressdialogを表示し、onPostExecuteメソッドでそれを却下することができます。これらの2つのメソッドは、UIスレッドで実行されます。 doInBackGroundメソッドは別のスレッドで実行されます。

もう1つの方法は、AsyncTaskを開始する前にprogressdialogを表示することです。個人的に私はonPreExecuteとonPostExecuteを使うオプションが好きです。その後、progressdialogはAsyncTaskにうまくリンクされます。

1

ProgressDialogはUIコードなので、イベントキューで発生する必要があります。 AsyncTaskはイベントキューから実行されます。次のような進行状況ダイアログを作成できます。

ProgressBar progressBar = activity.findViewById(progressBarID); 
progressBar.setIndeterminate(true) 
progressBar.setVisibility(View.VISIBLE); 
AsyncTask<Void, Void, Void> aTask = new AsyncTask<Void, Void, Void>(){ 
@Override 
    protected Void doInBackground(Void... arg0) { 
    //Do your operations here 
    return null; 
} 

@Override 
protected void onPostExecute(Void result) { 
    progressBar.setVisibility(View.GONE); 
     //Wrap up anything here, like closing the popup. 
} 
}; 
aTask.execute((Void)null); 
+0

今度は、新しいアイテムでGalleryViewをリフレッシュするのに問題があります。私はonPreExecuteで進行状況ダイアログを呼び出していて、正常に動作しています。 doInBackgroundでは、ハンドラーを呼び出してAdapter for GalleryViewを更新し、GalleryView自体もアダプター内の新しい項目で更新します。しかし、ギャラリーを更新するのは、アイテムを画面の外に移動する場合だけです。どんな助け? –

+0

@AbhishekSharma Hmm。いくつかのコードを見ることができますか?たぶん、新しい質問を開始します。そうすれば、答えを知っている人を引き付ける可能性が高くなります。 – heneryville

関連する問題