0

ジオコーダーを使用してアドレスを取得するワーカースレッドがあり、完了したら、アプリケーションスレッドのTextViewに結果を表示したいのですが、ワーカースレッドからsetText()を使用すると例外が発生するため、ベストプラクティスは次のとおりです。それを行う?

4

3 に答える 3

1

Android UIビューは、外部スレッドからアクセスしないでください。ビューのメソッドを呼び出すコードは、UIスレッドでのみ実行する必要があります。AsyncTaskを使用する必要があります。別のスレッドで実行されているタスクからUIを更新するための便利なコールバックメソッドを提供します。

于 2012-09-09T19:13:15.380 に答える
1

あなたのコードを見たり、どんな例外を知らずに言うのは難しいです:

ただし、次の点を確認してください。

  • textViewオブジェクトは、レイアウト内のオブジェクトにリンクされています(findViewById(R.id.textView1))
  • レイアウトに表示されますか?(要素の寸法が合計されない場合、ビューが画面から押し出されることがあります)
  • それは本当にあなたが設定しようとしている文字列ですか?(intなどではありませんか?)
于 2012-09-09T19:24:18.797 に答える
1

テキストを設定するスレッド内でこれを試してください。

    // you should finalize your text before using it in another thread, 
    // else the IDE would show an error
    final String text = yourTextToBeSet;
    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            textView.setText(text);
        }
    });

非UIスレッドでsetText()を呼び出すときに発生する例外は、非UIスレッドでUIに関連するものを呼び出すことができないためです。上記のように、runOnUiThread(Runnable)を簡単に呼び出して、UIスレッドでのコード実行を迂回させることができます。

コードがそれほど単純でない場合、このソリューションは十分ではないことに注意してください。そのような状況では、AsyncTaskを使用することをお勧めします。

于 2012-09-09T19:11:05.787 に答える