我有一个要求,我需要加载缩略图和Text
ListView
,Adapter
由自定义ListView
设置。缩略图应该存储在缓存中,因为我使用的是通用图像加载器但是我对它的实现非常困惑,以及如何根据我的要求使用它来加载URL
中的图像来自{{1}}。请通过良好的实施方式向我推荐一些方法。
答案 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示例的完整源代码。
答案 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上显示图像。加载图像后,它将根据布尔参数memCache
和fileCache
缓存在内存(或磁盘)中。下一次,它将从内存缓存或文件缓存中加载图像。
有关更多信息和示例,您应该访问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");
}
}
}
}