Как использовать универсальный загрузчик изображений

У меня есть требование, когда мне нужно загрузить миниатюры и Text в ListView, который устанавливается пользовательским Adapter. Миниатюры должны храниться в кэш-памяти, для этого я использую универсальный загрузчик изображений, однако я довольно сильно запутался в его реализации и в том, как использовать его в соответствии с моим требованием для загрузки изображений в ListView из URL. Пожалуйста, предложите мне несколько способов для этого с хорошей реализацией.


person Nitin Bathija    schedule 13.12.2012    source источник


Ответы (4)


Напишите ниже строку кода в методе getView() вашего адаптера, здесь imageUrls[position] — это массив URL-адресов изображений, аholder.image — это изображение.

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

И напишите ниже строку кода в свой конструктор адаптера.

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

это решит вашу проблему, и если у вас есть какие-либо вопросы по этому поводу, скажите мне.

И см. ссылку ниже для полного исходного кода универсального примера загрузчика изображений.

Android — универсальный загрузчик изображений

person Dipak Keshariya    schedule 13.12.2012
comment
Здравствуйте, Дипак. Я выполнил то, что вы предложили, и у меня возникли эти проблемы, пожалуйста, посмотрите и помогите мне по вопросу, опубликованному только мной. error-while-using-lazylist-in-listview" title="ошибка нехватки памяти при использовании lazylist в listview">stackoverflow.com/questions/13856815/ - person Nitin Bathija; 13.12.2012
comment
а также этот вопрос - stackoverflow.com/questions/13855413/ - person Nitin Bathija; 13.12.2012
comment
@ Дипак Кешария, это единственные шаги? - person Qadir Hussain; 19.12.2013

В вашем адаптере oncreate() определите

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

и используйте его в методе getView():

imageLoader.DisplayImage(//your image url, //your imageView);
person user1787773    schedule 13.12.2012

Я предлагаю вам использовать 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

person Vishnu Haridas    schedule 13.12.2012
comment
ОК, я попробую, но выдаст ли это какие-либо ошибки нехватки памяти, потому что изображения на сервере имеют очень высокое разрешение. - person Nitin Bathija; 13.12.2012
comment
@NitinBathija Если изображение слишком большое, должны быть некоторые реализации для уменьшения размера и доставки его на телефон. Выводить 15-мегапиксельную картинку на экран 320x240 px не лучшая идея - скорее измените размер и доставьте - сэкономите и тарифный план, и место на диске! - person Vishnu Haridas; 13.12.2012
comment
Я также использовал запрос Android в своих предыдущих проектах, но не могу понять, как его использовать в этом случае stackoverflow.com/q/16456812 /1503130 - person Prateek; 09.05.2013

Это поможет вам загрузить imageurl с помощью универсального загрузчика изображений, он даст статус для 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() {
person Mathan Chinna    schedule 20.10.2016