0

私のAndroidアプリケーションでは、インターネットからアプリにデータをロードするバックグラウンドスレッドを作成しました。そのバックグラウンドスレッドでは、次のようにテキストフィールドにいくつかの値を設定しました。

protected Void doInBackground(Void... params) {

if(!isDataFromInternetAvailable){
  re=(TextView)findViewById(android.R.id.empty);
  re.setText("no data ");
}
else{
re=(TextView)findViewById(android.R.id.empty);
  re.setText("You have data ");
}

return null;

}

ただし、次の例外が発生します。

android.view.ViewRoot$CalledFromWrongThreadException: ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます。

どうすればこれを修正できますか??

4

1 に答える 1

1

文字列を返すように AsyncTask を変更します。でonPostExecute、文字列の結果でテキスト ビューを更新します。

protected String doInBackground(Void... params) {
    return isDataFromInternetAvailable
        ? "You have data "
        : "no data ";
}

protected void onPostExecute(String result) {
    re = (TextView) findViewById(android.R.id.empty);
    re.setText(result);
}
于 2012-03-01T05:13:53.480 に答える