2010-03-19 65 views
0

在我的代碼的適配器如下,我伸出底座適配器:如何從另一個WebService Bean在Android的baseAdapter中調用getView方法?

@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(位置).getAlbumInfoCol()。get(0).getAlbumID(),0);

一些未下載的圖片將使用默認圖片,在這些圖片下載到另一個Web服務Bean後,我希望Web服務bean發送消息來調用此適配器中的getView方法以實現自動刷新功能。

但如果我更改Web服務下載豆如下,它會導致異常

7月3日至19日:46:33.241:ERROR/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; 
} 

回答

1
android.view.ViewRoot$CalledFromWrongThreadException: 
Only the original thread that created a view hierarchy can touch its views. 

此異常意味着你要更新從另一個線程的UI - 在Android中,這是不允許的。 您應該使用Handler將更改發佈到主UI線程。取而代之的

new Runnable() { 
    public void run() { 
    ... 
    } 
}; 

嘗試

mHandler.post(new Runnable() { 
        public void run() { 
        ... 
        } 
       };); 
相關問題