NetworkOnMainThread将图像加载到Gridview时getView方法中的异常

时间:2012-10-17 10:01:52

标签: android gridview android-asynctask baseadapter

我需要从网址获取图片并将其加载到gridview中。我在我的ImageAdapter类的getView方法中获取主线程异常的网络,该方法扩展了Base Adapter。我如何使用单独的线程或异步任务来解决这个问题。

public View getView(int position, View convertView, ViewGroup parent)   {           

    ImageView imageView;

    try {

            URL url = new URL(Product_ItemsURLs[position]);

            InputStream content = (InputStream)url.getContent();

            Drawable drawable = Drawable.createFromStream(content , "src"); 

            if (convertView == null)
            {
                imageView = new ImageView(mContext);
                imageView.setLayoutParams(new GridView.LayoutParams(380,380));
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                imageView.setPadding(10, 10, 10, 10);
            }
            else
            {
                imageView = (ImageView) convertView;
            }

            imageView.setImageDrawable(drawable);

            return imageView;

        } catch (MalformedURLException e) {

            e.printStackTrace();
            return null;

        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }

}

1 个答案:

答案 0 :(得分:0)

以下一行是导致问题的原因。它正在执行网络操作。从蜂窝开始,android不允许在UI线程上进行网络操作。

Drawable drawable = Drawable.createFromStream(content , "src");

您需要使用Asynctask下载drawable,并将drawable设置为onPostExecute中的视图(在UI线程上运行)。