Как загрузить изображение с помощью залпа и сохранить в кеше, пока изображение не используется

Я использую библиотеку volley для загрузки сетевых ответов. Я умею загружать изображения только тогда, когда это необходимо. Но чего я хочу добиться, так это загрузить все изображения за раз и сохранить их в своей кэш-памяти.

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

Я могу хранить изображения в кеше, используя свой собственный класс LruBitmapCache. И для загрузки изображений я использую следующий метод.

public void downloadImage(NetworkImageView view, MyApplication application, String imageUrl, Context ctx) {
    NetworkImageView image = view;
    ImageLoader loader = new ImageLoader(application.getRequestQueue(), new LruBitmapCache(
            LruBitmapCache.getCacheSize(ctx)));
    image.setImageUrl(imageUrl, loader);
}

Это отлично работает при загрузке изображений и сохранении в кеше. Но это только загрузка изображений, которые находятся на моем главном экране.

Чтобы загрузить все изображения, я попробовал следующий метод

public void downloadCoverImages(){

  int i = 0;

  for(ImageData data: GetData._instance.getImageList()){

    NetworkImageView iv = new NetworkImageView(BaseActivity.this);
    iv.setLayoutParams(new LinearLayout.LayoutParams(300,150));

    GetData._instance.downloadImage(iv, (MyApplication) getApplicationContext(),
            data.getImages().getSmallImage(),BaseActivity.this);

    //Log.e("Download",++i+" "+data.getImages().getSmallImage());
  }

}

Но я думаю, что для загрузки изображения не требуется правильный ImageView, и это также необходимо на главном экране. Так что в этом случае мне делать?

Мой одноэлементный класс выглядит следующим образом:

public enum GetData {
    _instance;
    private List<Sections> sectionsList = new ArrayList<Sections>();
    private List<DealDetails> dealDetailsList = new ArrayList<DealDetails>();
    private DealDetails dealDetails;

    public List<Sections> getSectionsList() {
        return sectionsList;
    }

    public void setSectionsList(List<Sections> sectionsList) {
        this.sectionsList = sectionsList;
    }

    public List<DealDetails> getDealDetailsList() {
        return dealDetailsList;
    }

    public void setDealList(List<DealDetails> dealDetailsList) {
        this.dealDetailsList = dealDetailsList;
    }

    public DealDetails getDealDetails() {
        return dealDetails;
    }

    public void setDealDetails(DealDetails dealDetails) {
        this.dealDetails = dealDetails;
    }


    public void downloadImage(NetworkImageView view, MyApplication application, String imageUrl, Context ctx) {
        NetworkImageView image = view;
        ImageLoader loader = new ImageLoader(application.getRequestQueue(), new LruBitmapCache(
                LruBitmapCache.getCacheSize(ctx)));
        image.setImageUrl(imageUrl, loader);
    }
}

Возможно ли, если я загружу изображение без использования залпа, сохраню в своем LRUCache и покажу его с помощью залпа? Любой хороший учебник для этого? Спасибо.


person Kunu    schedule 30.04.2015    source источник


Ответы (1)


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

imageLoader.get(data.getImages().getSmallImage(), new ImageLoader.ImageListener() {
        @Override
        public void onResponse(ImageLoader.ImageContainer response, boolean isImmediate) {

        }

        @Override
        public void onErrorResponse(VolleyError error) {

        }
    });

получить экземпляр загрузчика изображений из класса singleton volley. в вашем случае вам не нужно обрабатывать обратные вызовы imagelistener.

person Dinesh Kannan    schedule 30.04.2015
comment
Да, но меня беспокоит то, что я храню изображения в кеше. Прямо сейчас он проверяет изображение в кеше. Не могли бы вы предложить, как я могу реализовать свой собственный кеш в этом методе? - person Kunu; 30.04.2015
comment
Я обновил его. Это обычный одноэлементный класс. - person Kunu; 30.04.2015
comment
@kunu зачем тебе собственный кеш?.. чтобы скачивать и кэшировать изображения за одно время?.. - person Dinesh Kannan; 30.04.2015
comment
потому что я понял, что Volley не обеспечивает кэширование изображений. Таким образом, вы должны реализовать только сами. - person Kunu; 30.04.2015
comment
Загрузчик ImageLoader = новый ImageLoader (application.getRequestQueue(), новый LruBitmapCache (LruBitmapCache.getCacheSize (ctx))); в этой строке LruBitmapCache используется только для кеширования.. поддержка кеширования растровой памяти обеспечивается залпом.. - person Dinesh Kannan; 30.04.2015
comment
Давайте продолжим обсуждение в чате. - person Dinesh Kannan; 30.04.2015
comment
Ребята, вы нашли решение этой проблемы? Я тоже хотел бы загрузить все изображения одним звонком.... - person Vinchenzo; 03.07.2015