如何指定使用Glide for Android加载图片的重试次数?

2024-05-08

我正在为我的 Android 应用程序使用 glide 库。

我想告诉它在放弃并显示错误占位符图像之前重试获取图像 X 次(可能使用指数退避!)。

知道如何做到这一点吗? (顺便说一句,我正在使用 Volley 集成)。


使用您自己的资源解码器。我仅加载本地文件并处理重试计数decode()。如果您使用其他型号,只需更改为适当的接口即可。

Glide 4.0.0-SNAPSHOT 的示例。 自定义资源解码器:

public class FileDecoder implements ResourceDecoder<File, Drawable>{
    private final Context context;
    private int retryCounter = 0;

    public FileDecoder(Context context) {
        this.context = context;
    }

    @Override
    public Resource<Drawable> decode(File source, int width, int height, Options options) throws IOException{

        source = getTheFile(); //loading the image from a zip

        final Drawable icon = Drawable.createFromPath(source.getAbsolutePath());
        if(icon == null){
            if(retryCounter < 3){
                retryCounter++;
                return decode(source, width, height, options);
            }

            return null;
        }

        return new DrawableResource<Drawable>(icon) {
            @Override public Class<Drawable> getResourceClass() {
                return Drawable.class;
            }

            @Override public int getSize() {
                if (drawable instanceof BitmapDrawable) {
                    return Util.getBitmapByteSize(((BitmapDrawable) drawable).getBitmap());
                } else {
                    return 1;
                }
            }

            @Override public void recycle() {}
        };
    }

    @Override public boolean handles(File source, Options options) throws IOException {
        return true;
    }
}

需要自定义模型加载器

public class FileModelLoader implements ModelLoader<File, File>{

    @Nullable @Override
    public LoadData<File> buildLoadData(final File file, int width, int height, Options options){
        return new LoadData<>(new ObjectKey(file), new DataFetcher<File>() {
            @Override
            public void loadData(Priority priority, DataCallback<? super File> callback) {
                callback.onDataReady(file);
            }

            @Override public void cleanup() {

            }

            @Override public void cancel() {

            }

            @Override public Class<File> getDataClass() {
                return File.class;
            }

            @Override public DataSource getDataSource() {
                return DataSource.LOCAL;
            }
        });
    }

    @Override public boolean handles(File file){
        return true;
    }
}

注册您的自定义模块

public class CustomGlideModule implements GlideModule{

    @Override public void applyOptions(Context context, GlideBuilder builder){
        builder.setDefaultRequestOptions(RequestOptions.formatOf(DecodeFormat.PREFER_RGB_565)); //less memory consumption but less quality
    }

    @Override public void registerComponents(Context context, Registry registry){
        registry.append(File.class, File.class, new ModelLoaderFactory<File, File>(){
            @Override public ModelLoader<File, File> build(MultiModelLoaderFactory multiFactory){
                return new FileModelLoader();
            }

            @Override public void teardown(){

            }
        }).append(File.class, Drawable.class, new FileDecoder(context));
    }
}

添加到清单

<application>
    ...

    <meta-data
    android:name="com.fileloader.glide.CustomGlideModule"
    android:value="GlideModule" />

</application>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何指定使用Glide for Android加载图片的重试次数? 的相关文章

  • 如何为 Android 创建我们自己的 PDF 查看器?

    我想构建一个可在我的 Android 应用程序中使用的 PDF 阅读器 查看器 但我无法使用 Google 文档来阅读我的内容 我无法使用我的设备中已安装的任何 PDF 阅读器 它应该位于我的应用程序内 并且不会通过互联网公开我的安全内容
  • 什么是适合 Android 的 html 解析器?

    什么是适合 Android 的 html 解析器 这取决于你想做什么 如果你真的想处理 html Java 中有很多 html 解析器可以使用 这里有一些 https stackoverflow com questions 2168610
  • 简单 XML 框架:ElementMap 中的对象具有“类似内联”的行为

    我正在尝试在 Android 上序列化自定义对象的 Hashmap 以获得如下 xml
  • 在android Gridview中合并行和列

    我正在android中做一个图像查看页面 我需要在某些地方合并行 在某些地方合并列 我们可以在gridview中做到这一点吗 如果我们选择任何合并图像 则应选择整个图像视图 请任何人告诉我一个建议 提前致谢 Try 非对称网格视图 http
  • Android:将图像裁剪为特定尺寸

    我的目的是让用户从图库中选择一张图像 然后进行裁剪活动 但是 我需要将定义裁剪蒙版的矩形锁定到某个尺寸 然后用户只需重新定位它即可显示图像的一部分 关于如何做到这一点有什么想法吗 Thanks T Intent intent new Int
  • Android 中是否可以使用滑动视图导航的刻度线?

    我想在 Android 应用程序中创建一组页面 这些页面可以水平滑动并使用刻度线来指示当前页面在我拥有的 12 个页面集中的位置 Android 设计文档中提到了像这样使用刻度线的设计模式 http developer android co
  • java.lang.IllegalStateException:需要 .、< 或 ;,但在解压时发现 firebaseperf

    在我的应用程序中集成性能 SDK 后 gradle 在构建项目时打印以下警告 java lang IllegalStateException 需要 Ljava lang Object Lcom google android gms inte
  • webview 中的 android 移动 Twitter 页面无法打开?

    我正在尝试打开以 https 开头的 Twitter 页面webview在安卓中 但它没有打开 并且持续加载时出现黑屏 屏幕截图如下 Edit 在主网络视图中我有 Twitter 页面的链接https twitter com mytwitt
  • RecyclerView 单击将数据传递到新活动

    我正在制作一个包含三个选项卡的应用程序 每个选项卡都有一个带有两个文本的 recyclerview 我希望用户能够单击任何 recyclerview 项目 并且该项目中的文本应传递到新活动 这是应用程序外观的图像 https i stack
  • 如何去掉android状态栏的电池图标?

    我通过去掉背景图像来删除 Android 中显示网络 电池和时间信息的状态栏 但图标仍然存在 我也想知道如何删除电池图标 不是用于应用程序 而是用于框架开发 提前致谢 你试过打电话吗 getWindow setFlags WindowMan
  • Android 应用程序不需要任何特殊访问权限

    当我开始安装时myapp apk 我得到下面的屏幕 我的应用程序需要位置 外部存储权限 上述权限应该根据需要向用户请求 即在需要这些权限的代码之前 现在 当安装应用程序时 我会看到一个屏幕 上面显示应用程序不需要任何特殊访问权限 如下图所示
  • Android 导航组件 - 从“任何地方”/基本片段导航?

    我正在开发一个应用程序 它有一个奇怪的花招 可以在设备旋转时打开特定的片段 在实现 android 的导航组件之前 所需要的只是对当前活动的引用 并且可以在特定时刻向用户显示的任何内容之上执行手动片段事务 但是在转移到导航组件之后 我发现很
  • 如何在 LazyColumn 底部添加空白区域?

    我想添加 LazyColumn 的空白底部 并且我想允许用户调出底部元素 我怎样才能实现这个 Example LazyColumn modifier Modifier fillMaxWidth height 300 dp border 2
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • 使用bindService启动IntentService时是否应该调用onHandleIntent?

    我的服务延伸IntentService当它开始时startService onHandleIntent被叫 但是 当服务启动时bindService 我确实需要绑定 onHandleIntent没有被调用 Should onHandleIn
  • Recyclerview项目点击涟漪效果[重复]

    这个问题在这里已经有答案了 我正在尝试添加Ripple影响到RecyclerView的项目 我在网上查了一下 但找不到我需要的东西 我努力了android background归因于RecyclerView本身并将其设置为 android
  • 带有不透明导航栏的深色文本透明状态栏

    等等 这不是重复的 类似的问题已被问到here https stackoverflow com questions 38025865 android fully transparent status bar with non transpa
  • 永久删除Android文件

    我发现了一个名为这会从 Android 设备中永久删除文件和文件夹 以便删除的文件无法再恢复 这是我正在谈论的应用程序 但我想知道如何做到这一点 我知道它是用 android studio 制作的 i尝试了常规的删除方式file delet
  • PhoneGap Build Android 不显示闪屏

    这是我的 config xml 中与启动屏幕相关的代码
  • Android ClassNotFoundException:在路径上找不到类

    10 22 15 29 40 897 E AndroidRuntime 2561 FATAL EXCEPTION main 10 22 15 29 40 897 E AndroidRuntime 2561 java lang Runtime

随机推荐