У меня есть требование, когда мне нужно загрузить эскизы и Text
в ListView
, которые устанавливаются пользовательским Adapter
. Миниатюры должны храниться в кэш-памяти, потому что я использую Universal Image Loader, но я довольно сильно запутался в его реализации и как использовать его согласно моему требованию для загрузки изображений в ListView
из URL
. Пожалуйста, предложите мне несколько способов для этого с хорошей реализацией.
Как использовать универсальный загрузчик изображений
Ответ 1
Запишите ниже строку кода в свой метод getView(), здесь imageUrls [position] - это массив URL-адресов изображения, а файл -обладатель - изображение.
imageLoader.displayImage(imageUrls[position], holder.image, null);
И напишите ниже строку кода в свой конструктор адаптера.
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
он решит вашу проблему, и если у вас есть какие-либо вопросы относительно этого, скажите мне.
И см. ниже ссылку на полный исходный код примера Universal Image Loader.
Ответ 2
В вашем адаптере oncreate() define
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
и использовать его в методе getView():
imageLoader.DisplayImage(//your image url, //your imageView);
Ответ 3
Я предлагаю вам использовать AQuery - (Android-Query) - супер простой интерфейс для пользовательского интерфейса для Android.
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
. В следующий раз он загрузит изображение из кеша памяти или кэша файлов.
Для получения дополнительной информации и примеров вы должны посетить проект AQuery в http://code.google.com/p/android-query/
Дополнительный код загрузки изображения - http://code.google.com/p/android-query/wiki/ImageLoading
Ответ 4
Это поможет вам загрузить imageurl с помощью универсального imageloader, он даст статус для imageurl, начнет загрузку, завершение или неудачу, а запрос также отменяет статус. Я надеюсь, что это может вам помочь.
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");
}
});
}
если вам нравится кэшировать изображение, добавьте эти ниже функции... Но инициировать создание, потому что оно очень сильно..
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();
Затем вы добавите функцию ImageLoadingListener()...
public void ImageLoaderListener(String url){
imageLoader.loadImage(url, defaultOptions, new ImageLoadingListener() {
Ответ 5
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");
}
}
}
}