1

我想在 gridView 适配器中下载并显示一些图像。这是我的适配器

public class CustomAdapter extends BaseAdapter {

    private Context context;

    ArrayList<String> list = null;


    public CustomAdapter (Context context, ArrayList<String> list) {
        this.context = context;
        this.list= list;
    }

    /*
     * (non-Javadoc)
     * 
     * @see android.widget.Adapter#getCount()
     */
    public int getCount() {
        return list.size();
    }

    /*
     * (non-Javadoc)
     * 
     * @see android.widget.Adapter#getItem(int)
     */
    public Object getItem(int paramInt) {
        return paramInt;
    }

    /*
     * (non-Javadoc)
     * 
     * @see android.widget.Adapter#getItemId(int)
     */
    public long getItemId(int paramInt) {
        return paramInt;

    }

    /*
     * (non-Javadoc)
     * 
     * @see android.widget.Adapter#getView(int, android.view.View,
     * android.view.ViewGroup)
     */
    public View getView(int position, View child, ViewGroup parent) {

                 //Inflating View
                  .....................


        GridItem gridItem = new GridItem (imageview);
        DownloadContent downloadContent = new DownloadContent();
        downloadContent.setDownloadUrl(list.get(0));
        downloadContent.setContentType(DownloadContent.CONTENT_TYPE_IMAGE);
        downloadContent.setDownloadFilePath(filepath);
        downloadContent.setDownloadNotifier(imageDownloadNotifier);
        downloadContent.setTag(gridItem);
        new DownloadTask(new DownloadContent[] { downloadContent }).execute();

//      
        return view;
    }

  private DownloadNotifier imageDownloadNotifier = new DownloadNotifier() {

    @Override
    public void downloadCompleted(DownloadContent downloadContent) {
        if(downloadContent.isSuccess())
        {
            GridItem gridItem = (GridItem) downloadContent.getTag();
            ImageView imgView = mgridItem.getImage();
            Bitmap bitmap = BitmapFactory.decodeFile(downloadContent.getDownloadFilePath());
            imgView.setImageBitmap(bitmap);
        }

    }
};

}

这显示了以下异常

-26 11:27:33.629: E/AndroidRuntime(2082): FATAL EXCEPTION: Thread-24
10-26 11:27:33.629: E/AndroidRuntime(2082): android.view.ViewRoot$CalledFromWrongThreadException: **Only the original thread that created a view hierarchy can touch its views.**
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.ViewRoot.checkThread(ViewRoot.java:3020)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.ViewRoot.requestLayout(ViewRoot.java:634)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.View.requestLayout(View.java:8267)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.View.requestLayout(View.java:8267)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.View.requestLayout(View.java:8267)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.View.requestLayout(View.java:8267)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.widget.AbsListView.requestLayout(AbsListView.java:1157)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.View.requestLayout(View.java:8267)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.widget.RelativeLayout.requestLayout(RelativeLayout.java:257)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.View.requestLayout(View.java:8267)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.view.View.requestLayout(View.java:8267)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.widget.ImageView.setImageDrawable(ImageView.java:322)
10-26 11:27:33.629: E/AndroidRuntime(2082):     at android.widget.ImageView.setImageBitmap(ImageView.java:336)

我怎样才能解决这个问题?我如何更新关于下载图像的视图?

提前致谢

4

1 回答 1

0

android.view.ViewRoot$CalledFromWrongThreadException:只有创建视图层次结构的原始线程才能触摸其视图。

这是问题所在,因为您试图直接在主线程内从网络获取图像。相反,您应该实现异步图像加载逻辑

我建议您检查并实现如下逻辑:Universal Image loader

于 2012-10-26T06:05:40.863 回答