How to invoke the getView method in the baseAdapter in Android from another WebService Bean?
Posted
by greysh
on Stack Overflow
See other posts from Stack Overflow
or by greysh
Published on 2010-03-19T08:05:55Z
Indexed on
2010/03/19
8:11 UTC
Read the original article
Hit count: 183
The adapter in my code as follows, I extends the base adapter:
@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; }
However, I download the imagine asynchronously,
When invoke Bitmap icon = aws.getAlbumImg(itemInfolist.get(position).getAlbumInfoCol().get(0).getAlbumID(), 0);
Some pictures which haven't downloaded will use the default image, after these picutures have downloaded in another Web Service Bean, I want the Web Service bean sends a message to invoke the getView method in this adapter in order to implement the auto refresh function.
But if I change the Web Service Download Bean as follows,it will cause the exception
03-19 07:46:33.241: ERROR/AndroidRuntime(716): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
HomeAdapter mHomeAdapter;
public AlbumWS(HomeAdapter homeAdapter) { mHomeAdapter = homeAdapter; }
And after download,
public boolean getAlbumImgWS(final ArrayList 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; }
© Stack Overflow or respective owner