android - 使用异步任务下载图像并在图库中显示

标签 android multithreading image uiimageview

我必须下载一些图像并使用 Gallery 显示它们。对于我用于图库的图像适配器,我必须使用异步任务在获取 View 方法中开始下载图像。我的问题是我无法将下载的 ImageView 返回给调用函数。由于 networkonmainthread 异常,我无法使用主线程下载。

图库 Activity

public class GalleryActivity extends Activity {

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.gallery);
        ((Gallery) findViewById(R.id.gallery)).setAdapter(new ImageAdapter(this));
     }

图像适配器

public class ImageAdapter extends BaseAdapter { 

    public View getView(int position, View convertView, ViewGroup parent) {     
        new galleryBackground().execute(Integer.toString(position));
        ImageView i =null;
        return i;
    }

}

图库

public class galleryBackground extends AsyncTask<String, Integer, String> { 
  Bitmap bm;    
  public String[] myRemoteImages = { ....};
  ImageView i = new ImageView(GalleryActivity.this);

  @Override
  protected String doInBackground(String... arg0) { 
      try { 
          URL aURL = new URL(myRemoteImages[Integer.parseInt(arg0[0])]);
          URLConnection conn = aURL.openConnection();

          conn.connect();
          InputStream is = conn.getInputStream();
          BufferedInputStream bis = new BufferedInputStream(is);
          bm = bitmapFactory.decodeStream(bis);
          bis.close();
          is.close();   
      }

  @Override     
  protected void onPostExecute(String result) {
     i.setImageBitmap(bm);
     i.setScaleType(ImageView.ScaleType.FIT_CENTER);
     i.setLayoutParams(new Gallery.LayoutParams(150, 150));
     // i have to return this Image view to the calling function        
     super.onPostExecute(result);   
}

最佳答案

这个库会解决你的问题:

https://github.com/xtremelabs/xl-image_utils_lib-android

将 JAR 从该存储库中拉到您的项目中。

在您的 Activity/Fragment 中实例化一个 ImageLoader 并将其传递给适配器。

调用 imageLoader.loadImage(imageView, url),一切都由该系统为您完成。

wiki 可以向您展示如何插入它。

关于android - 使用异步任务下载图像并在图库中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14357011/

相关文章:

android - 选择器按钮在我的 android 按钮上不起作用。如何解决?

java - if 语句不返回结果

c++ - 在构造函数中使用 "this"启动线程安全吗?

ios - UIImages NSURL 和线程

Java:将大量二维数组分割成机器页面大小的倍数的 block

jquery简单图像幻灯片教程

ios - 从 iOS 应用程序获取 WatchKit 应用程序中的图像

没有 Canvas 可以裁剪 Javascript 图像吗?

java - 检查并乘以两个微调器中的选定数字

android - ViewPagerAdapter : YouTube video playback stopped due to unauthorized overlay on top of player