2017-01-07 2 views
1

Я делаю что-то вроде этого, чтобы получить битмап синхронно и установить его как изображение с помощью imageView.setImageBitmap (bitmap);Загрузите изображение синхронно с глиссированием и кешем его на диске

return Glide 
    .with(mContext) 
    .load(url) 
    .asBitmap() 
    .into(width, height) 
    .get(); 

мне нужно сделать это синхронно, потому что я делаю это в doInBackground AsyncTask в. Мне нужно получить URL-адрес изображения из бэкэнда, прежде чем загружать его с помощью скольжения. Позже я загружаю один и тот же URL-адрес непосредственно с помощью скольжения. Проблема в том, что изображение не кэшируется на диске. Любое решение для этого?

+0

кэширование работает только тогда, когда вы остаетесь на той же странице –

ответ

0

Использование diskCacheStrategy

return Glide 
    .with(mContext) 
    .load(url) 
    .asBitmap() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .into(width, height) 
    .get(); 
+0

Hi Reaz, diskCacheStrategy возвращает DrawableRequestBuilder, так что вы больше не можете использовать .asBitmap() – Minas

+0

Изменено ответ. Вы пытались переместить '.diskCacheStrategy (DiskCacheStrategy.ALL)' под 'asBitmap()' функцию? –

+0

Да, я пытаюсь, по какой-то причине, изображения не кэшируются в любом случае. На следующем экране я делаю Glide.with (this) .load (mArticle.getImgLink()). В (imageHeader); И он снова загружает изображение. – Minas

1

добавить diskCacheStrategy к вашему Glide, выберите StrategyType в Источник

Вы можете понять, почему использовать SOURCE из этого link

DiskCacheStrategy.NONE кэши ничего, как обсуждалось

DiskCacheStrategy.SOURCE кэширует только оригинальное изображение с полным разрешением.

DiskCacheStrategy.RESULT кэширует только конечное изображение, после уменьшения разрешения (и, возможно, преобразования) (поведение по умолчанию)

DiskCacheStrategy.ALL кэширует все версии изображения

попробовать: получить растровый URL:

return Glide 
    .with(mContext) 
    .load(url) 
    .asBitmap() 
    .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
    .into(width, height) 
    .get(); 

Для загрузки в ImageView:

 Glide 
     .with(mContext) 
     .load(url) 
     .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
     .into(imageView) // your ImageViewID here 

Для загрузки изображения в ImageView после получения растрового изображения:

Glide.with(context) 
     .load(url) 
     .asBitmap() 
     .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
     .into(new SimpleTarget<Bitmap>() { 
      @Override 
      public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
       iv_image.setImageBitmap(resource); // you can store resource to some variable too if you want to update more than 1 images or try it like iv_image2.setImageBitmap(resource) 
       iv_image.requestLayout(); 
      } 
     }); 
+0

Я пробовал это, тот же результат, что и DiskCacheStrategy.ALL – Minas

+0

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

+0

Я сделал это, поверьте, он снова загружается. Вы пробовали этот код? – Minas