AsycnTask の次のコード:
@Override
protected Boolean doInBackground(View... params) {
try{
Drawable drawPhoto = DataDatero.ImageDownload(taskPhotoName);
((ImageView)params[0]).setImageDrawable(drawPhoto);
((TextView)params[1]).setText(taskItemListText);
((TextView)params[2]).setTextColor(taskColore);
((TextView)params[2]).setText(taskItemStockText);
[...]
}
次のことを説明する CalledFromWrongThreadException をスローします。
ビュー階層を作成した元のスレッドのみがそのビューにアクセスできます
これは多くの質問で議論されてきました: example , another example ; そして全員が同じ結論に達します。
しかし、私は例外を取得しているだけではありません..
List アダプタのgetViewから実行すると、テキストの例外がスローされている間、ビューで画像 (params[0]) が更新されます。また、 textview updates だけを残すと、テキストが更新され、例外はスローされません。
最初に TextView を更新し、後で ImageView を更新すると、一部のテキストと画像は更新されますが、一部の画像は更新されません (その imageDownload には 2 ~ 3 秒のネットワーク操作が含まれます)。
それらのいくつかは更新され、他のものは更新されないのはなぜですか?
注: これは、api 16 エミュレーションで、sdk 4.0、v4 サポートでのみテストされました。私はそれを修正し、doInBackground のビューには触れていません。