2012-10-26 20 views
1

我想要下載並在gridView適配器中顯示一些圖像。這裏是我的適配器如何在android中下載圖像更新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) 

我該如何解決這個問題?我如何更新下載圖像的視圖?

由於提前

回答

0

android.view.ViewRoot $ CalledFromWrongThreadException:創建一個視圖層次可以觸摸其觀點只有 原來的線程。

這是因爲您要直接在主線程中獲取來自Web圖像的問題。相反,您應該實施異步圖像加載邏輯

我建議你檢查並實施類似的邏輯:Universal Image loader

+0

我用異步任務圖像下載和完成它展示了使用各自imageview.I認爲這個問題是內部Downloadnotifier更新imageview的時候,將下載後。 –

+0

@Paresh Mayani - 我認爲OP正嘗試在另一個線程中使用(更新或訪問)主UI視圖。只有主UI線程才能更新視圖。 – user370305