2011-11-01 53 views
-1

4回目のスタートボタンをクリックすると、例外が発生する非同期タスク

は、私はそれがエミュレータでOK実行するが、後にこの行を追加するには、デバイスで実行すると、エラーが出たとき、唯一looper.prepare

呼び出されていないスレッド内のスレッド内でハンドラを作成できません4回目のスタートボタンをクリックしてtaskAllcheck.execute();に電話すると、スレッドごとに1つのルーパーしか作成されない可能性があります。

+0

checkall()メソッドは何をしますか? 「ハンドラを作成できません...」例外は通常、UIスレッド、バックグラウンドスレッドでのみ許可されている何かをしようとしているときに発生します。 – Egor

+0

checkall()は、bluetoothのような設定をオンまたはオフにするか、デバイスのgpsをオンまたはオフにし、それに応じてステータスをデータベース –

+0

で更新することだけを確認します。多分、これらはUIスレッド上で実行されなければならない操作です。 activity.runOnUIThread()メソッドでそれらをRunnableに入れることができます。これにより、Looperの例外を克服します。 – Egor

答えて

-1

UIを更新するための組み込みハンドラを持つUIスレッドとして非同期スレッドを考えてください。何があっても、スレッドです。だから今はクリアされて、私はあなたが実際にcheckall()関数を書いているか分かりません。非同期タスクがバックグラウンドで呼び出すには、すべてのチェック機能がローカルな方法である必要があります。あなたのメインクラスのメソッドにすることはできません。そうであれば、非同期タスクを持つ必要はありません。したがって、非同期タスクにcheckall()関数を追加してください。

次に、非同期タスクではルーパーは必要ありません。データの取り扱いは、以下によって行われます。

this.publishProgress( "ダイアログを表示");

必要なものを確実に渡してください。 intstringbooleanarray、またはこれと何かをすべて処理できます。したがって、実装を賢明に使用してください。

ここでは対応するようにonProgressUpdate()を内部に作ります。したがって、メソッドなどのUIスレッドから何かを実行したいかどうかを確認してください。これはこの方法で行うことができます。

ここで私が言った変更を行います。私に戻ってください。私はあなたと仕事するのに良い立場にいるでしょう。問題を特定できれば世話をする。

+0

編集のためにPeterに感謝します。私はそれを念頭に置いておきます。 – medampudi

関連する問題