如何使用通用图像加载器

时间:2012-12-13 06:20:58

标签: android android-listview android-image android-adapter

我有一个要求,我需要加载缩略图和Text ListViewAdapter由自定义ListView设置。缩略图应该存储在缓存中,因为我使用的是通用图像加载器但是我对它的实现非常困惑,以及如何根据我的要求使用它来加载URL中的图像来自{{1}}。请通过良好的实施方式向我推荐一些方法。

5 个答案:

答案 0 :(得分:15)

将下面的代码行写入适配器的getView()方法,此处imageUrls [position]是Image Urls的数组,holder.image是imageview。

imageLoader.displayImage(imageUrls[position], holder.image, null);

将下面的代码行写入适配器构造函数。

ImageLoader imageLoader=new  ImageLoader(activity.getApplicationContext());

它将解决您的问题,如果您对此有任何疑问,请告诉我。

请参阅以下链接,了解Universal Image Loader示例的完整源代码。

Android - Universal Image Loader

答案 1 :(得分:8)

在适配器的oncreate()中定义

 ImageLoader imageLoader=new  ImageLoader(activity.getApplicationContext());

并在getView()方法中使用它:

imageLoader.DisplayImage(//your image url, //your imageView);

答案 2 :(得分:8)

我建议你使用AQuery - (Android-Query) - 一个用于Android的超级简单的UI操作框架。

AQuery是一个库,您需要将其包含在构建路径中。

在AQuery中,您可以下载,显示(带效果)并使用以下行缓存图像(包括内存和磁盘):

AQuery aq = new AQuery(yourActivity.this);
boolean memCache = true;
boolean fileCache = true;
aq.id(R.id.image1).image("http://www.example.com/image.jpg", memCache, fileCache);

AQuery将处理所有数据下载过程,并将在您给出的ImageView上显示图像。加载图像后,它将根据布尔参数memCachefileCache缓存在内存(或磁盘)中。下一次,它将从内存缓存或文件缓存中加载图像。

有关更多信息和示例,您应该访问http://code.google.com/p/android-query/

上的AQuery项目

有关图片加载的更多代码 - http://code.google.com/p/android-query/wiki/ImageLoading

答案 3 :(得分:1)

This will Help you to load imageurl using universal imageloader it will give status for imageurl is start to Loading , Completed or failed and request is cancel status also providing.I hope it may help you..

 public void ImageLoaderListener(String url){

        imageLoader.loadImage(url,new ImageLoadingListener(){
            @Override
            public void onLoadingStarted(String imageUri, View view) {
                Log.e("tag", "onLoadingStarted");
            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                Log.e("tag", "onLoadingFailed");
            }
            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                Log.e("tag", "onLoadingComplete");
                imageView.setImageBitmap(loadedImage);
            }
            @Override
            public void onLoadingCancelled(String imageUri, View view) {
                Log.e("tag", "onLoadingCancelled");
            }
        });
    }

if you like to cache the image add this below functions... But to initiate on create because its very highly ..

 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
            .defaultDisplayImageOptions(DisplayImageOptions.createSimple())
            .build();

    imageLoader = ImageLoader.getInstance();

    if (!imageLoader.isInited()) {
        imageLoader.init(config);
    }
    defaultOptions = new DisplayImageOptions.Builder()
            .cacheInMemory(true)
            .cacheOnDisc(true)
            .build();

Then you will add that ImageLoadingListener() function...

public void ImageLoaderListener(String url){
  imageLoader.loadImage(url, defaultOptions, new ImageLoadingListener() {

答案 4 :(得分:0)

public class CategoryModel 
{
        String CatId;
        String CatName;
        String Image;
        String Price;
        Bitmap ImgSrc;
        CategoryAdapter Ma;
        public CategoryModel()
        {
        }
        public CategoryModel(String catid,String catname,String image,String price)
        {
            this.CatId = catid;
            this.CatName = catname;
            this.Image = image;
            this.Price = price;
        }
        public CategoryModel(String catname,String image,String price)
        {
            this.CatName = catname;
            this.Image = image;
            this.Price = price;
        }
        public void setCatId(String catid)
        {
            this.CatId =catid;
        }
        public String getCatId()
        {
            return this.CatId;
        }
        public void setCatName(String catname)
        {
            this.CatName=catname;
        }
        public String getCatName()
        {
            return this.CatName;
        }
        public void setImage(String image)
        {
            this.Image=image;
        }
        public String getImage()
        {
            return this.Image;
        }
        public void setPrice(String price)
        {
            this.Price=price;
        }
        public String getPrice()
        {
            return this.Price;
        }
        public Bitmap getImagesrc()
        {
            return this.ImgSrc;
        }
        public void setAdapter(CategoryAdapter adf)
        {
            this.Ma = adf;
        }
        public CategoryAdapter getAdapter()
        {
            return this.Ma;
        }

        public void LoadImage(CategoryAdapter adap)
        {
            this.Ma = adap;
            if(Image != null && !Image.equals(""))
            {
                new ImageLoader().execute(new String[]{ Image });
            }
        }
        public static Bitmap getBitmapUrl(String src)
        {
            try
            {
                URL url = new URL(src);
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                connection.setDoInput(true);
                connection.connect();
                InputStream input = connection.getInputStream();
                Bitmap mybitmap = BitmapFactory.decodeStream(input);
                connection.disconnect();
                return mybitmap;
            }
            catch (Exception e) {
                return null;
            }
        }
        private class ImageLoader extends AsyncTask<String, String, Bitmap>
        {
            @Override
            protected void onPreExecute()
            {
            }
            @Override
            protected Bitmap doInBackground(String... params) {
                try
                {
                    Bitmap b = getBitmapUrl(params[0]);
                    return b;
                }
                catch (Exception e)
                {
                    Log.e("Excep", e.toString());
                    return null;
                }
            }
            @Override
            protected void onPostExecute(Bitmap res)
            {
                if(res!=null)
                {
                    ImgSrc = res;
                    if(Ma!=null)
                    {
                        Ma.notifyDataSetChanged();
                    }
                }
                else
                {
                    Log.e("Error", "Image not Loading");
                }
            }
        }
}