2011-09-07 18 views
0

私の最初の非同期オブジェクトの使用から生じる問題です。Androidプログレスバースレッド例外

私は主にいくつかのTextViewがプログラムによって作成され、LinearLayoutに追加されています。また、ボタンをクリックすると、AsyncTaskオブジェクトがインスタンス化され、doInBackGroundメソッドで結果が取得されます。結果の文字列をTextViewにどのように転送する必要がありますか? Cをインテントを使用してonPostExecute方法、 B)から、これらのTextViewsののsetTextメソッドを呼び出すと、主な活動でonActivityResultメソッドによって

a))は、いくつかの他の方法(手がかりがいいだろう!)

ありがとう!

+0

これらのTextViewのSetTextメソッドをonPostExecuteメソッド – Harinder

答えて

1

私はAsyncTaskオプションを使用します。私はあなたが既に1つを持っているので、ボタンをクリックすると起こる結果の部分を得ることは、AsyncTaskdoInBackgroundメソッドでそれを持つ良いデザインだと推測しています。

次に、あなたのAsyncTaskonPostExecute方法における各TextViewsetText(...)メソッドを呼び出すことができます。または、より適切な場合は、バックグラウンド計算時にpublishProgress(...)およびonProgressUpdate(...)メソッド(AsyncTask documentationを参照)を使用して結果が得られたら、各ビューを更新して、最後まで待つ必要はありません。

ジャスト(少なくとも、それはあなたの説明から、このように思える)とあなただけのビューがUIスレッド上で作成されている、onPreExecuteonProgressUpdateonPostExecute方法からsetText(...)を呼び出すことができますので、彼らが唯一できることを心に留めこれらのメソッドが実行される同じスレッドから変更されます。

+0

から呼び出すと、これらのメソッドは同じスレッドからのみ変更できます。これらのメソッドは<ありがとうございました。私はそれについて考えていました。 – SirHowy

1

AsyncTaskを使用する場合は、doInBackgroundメソッドを使用して処理し、onPostExecuteはUIの変更を更新できます。したがって、AsyncTaskを使用する必要がある場合は、オプションAに行きます。

0

TextViewを非公開にしてdoInBackgroundで定義すると、onPostExecuteのsetTextメソッドを呼び出すことも、doInBackgroundの最後のメソッドとして呼び出すこともできますが、onPostExecuteをおすすめします。