Загрузка уже загруженного изображения в автономном режиме в Glide для Android - PullRequest
0 голосов
/ 04 ноября 2018

Использую Glide версии 4.8.0

И для загрузки изображения я делаю это

GlideApp
    .with(HomePageFragment.this)
    .load(remoteURL)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(mImageView);

Когда устройство подключено к Интернету, изображение успешно загружается, но когда устройство переходит в автономный режим , как загрузить то же изображение из кэша, которое уже было извлечено из remoteURL?

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

@GlideModule
public class CustomAppGlideModule extends AppGlideModule {

    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        builder.setMemoryCache(new LruResourceCache(20 * 1024 * 1024));
        builder.setDiskCache(new InternalCacheDiskCacheFactory(context, 100 * 1024 * 1024));
    }

}

Я тоже пытался

.onlyRetrieveFromCache(true)

Но это тоже не помогает.

1 Ответ

0 голосов
/ 04 ноября 2018

Вариант 1: Используйте DiskCacheStrategy.SOURCE вместо DiskCacheStrategy.ALL, он должен работать, поскольку DiskCacheStrategy.SOURCE сохраняет исходные данные в кэш.

//Version 4.x
GlideApp
    .with(HomePageFragment.this)
    .load(remoteURL)
    .diskCacheStrategy(DiskCacheStrategy.DATA)
    .into(mImageView);

//Version 3.x
Glide.with(mContext)
   .load(url)
   .diskCacheStrategy(DiskCacheStrategy.SOURCE)
   .into(imageView);

Вариант 2: (если выше не работает)

Есть какая-то конкретная причина использования Glide? Хочешь попробовать Пикассо, я нашел Пикассо намного лучше для этого. Вы можете использовать следующий код для автономного кэширования. Сначала он будет работать в автономном режиме, если не найден, а затем искать онлайн-изображение.

Picasso.with(getActivity())
.load(imageUrl)
.networkPolicy(NetworkPolicy.OFFLINE)
.into(imageView, new Callback() {
    @Override
    public void onSuccess() {
      //..image loaded from cache
    }

    @Override
    public void onError() {
        //Try again online if cache failed
        Picasso.with(getActivity())
                .load(posts.get(position).getImageUrl())
                .error(R.drawable.header)
                .into(imageView, new Callback() {
            @Override
            public void onSuccess() {
              //... image loaded from online
            }

            @Override
            public void onError() {
                Log.v("Picasso","Could not fetch image");
            }
        });
    }
});
...