Адаптер в моем коде выглядит следующим образом, я расширяю базовый адаптер:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder vHolder;
// if (convertView == null) {
vHolder = new ViewHolder();
convertView = mInflater.inflate(R.layout.home_item, null);
vHolder.albumIcon = (ImageView) convertView
.findViewById(R.id.albumIcon);
try {
Bitmap icon = aws.getAlbumImg(itemInfolist.get(position)
.getAlbumInfoCol().get(0).getAlbumID(), 0);
if (icon != null) {
vHolder.albumIcon.setImageBitmap(icon);
} else {
vHolder.albumIcon.setImageBitmap(BitmapFactory.decodeResource(
context.getResources(), R.drawable.album));
}
} catch (Exception e) {
vHolder.albumIcon.setImageBitmap(BitmapFactory.decodeResource(
context.getResources(), R.drawable.album));
}
convertView.setTag(vHolder);
return convertView;
}
Однако я загружаю изображение асинхронно,
Когда вызывать
Значок растрового изображения = aws.getAlbumImg (itemInfolist.get (position) .getAlbumInfoCol (). Get (0) .getAlbumID (), 0);
Некоторые изображения, которые не были загружены, будут использовать изображение по умолчанию, после того, как эти изображения загружены в другой компонент Web-сервиса, я хочу, чтобы компонент Web-сервиса отправлял сообщение для вызова метода getView в этом адаптере для реализации автоматического функция обновления.
Но если я изменю компонент загрузки веб-службы следующим образом, это вызовет исключение
03-19 07: 46: 33.241: ОШИБКА / AndroidRuntime (716): android.view.ViewRoot $ CalledFromWrongThreadException: только исходный поток, создавший иерархию представления, может касаться его представлений.
HomeAdapter mHomeAdapter;
public AlbumWS(HomeAdapter homeAdapter) {
mHomeAdapter = homeAdapter;
}
And after download,
public boolean getAlbumImgWS(final ArrayList<Integer> albumIDs) {
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
AlbumInfoWS aiws = new AlbumInfoWS();
for (int i = 0; i < albumIDs.size(); ++i) {
if (ABSCENTALBUMIMGS.contains(albumIDs.get(i))) {
continue;
}
if (FunctionUtil.isExist(albumIDs.get(i))) {
continue;
}
String urlPath = aiws.getAlbumImage("en_US",
Config.IMG_ATTIBUTETYPE, albumIDs.get(i));
boolean ret = FunctionUtil.simpleDownload(Config.HOST
+ urlPath, "/data/data/com.greysh.amped/img/"
+ albumIDs.get(i) + ".jpg");
if (!ret) {
if (!ABSCENTALBUMIMGS.contains(albumIDs.get(i))) {
ABSCENTALBUMIMGS.add(albumIDs.get(i));
}
}
mHomeAdapter.notifyDataSetChanged();
}
}
}).start();
return true;
}