首页 > 解决方案 > Glide ModelLoader - 需要即时从网络获取图片 url

问题描述

目标: 我有一个模型列表,它在我正在加载图像的 recyclerview 中呈现。我的 Model 和 Model.imageUrl 来自两个不同的来源(我无法控制)。因此,对于每个模型,我都需要调用 model.getImageUrl() ,这是一个网络调用。所以我想在这里实现的是 recyclerviewAdapter.onBindViewHolder 将调用 Glide...load(model) ,这将触发我的 model.getImageUrl() 并且图像将在 model.getImageUrl() 完成后由 glide 加载。

到目前为止的研究: 据我所知,我需要按照此处的说明实现 ModelLoader:https ://bumptech.github.io/glide/tut/custom-modelloader.html

我曾尝试使用 BaseGlideUrlLoader 但在 BaseGlideUrlLoader.getUrl() 中调用 model.getImageUrl() 会导致违反策略(可能是由于主线程上的网络调用),因为所有网络请求都应在 DataFetcher.loadData() 方法中完成。

我曾尝试在这里查看 DataFetcher 实现:https ://github.com/bumptech/glide/search?p=2&q=implements+DataFetcher&unscoped_q=implements+DataFetcher

但我不知道该关注哪一个。此外,我不想更改 glide 将 imageUrls 加载到 imageViews 的整体方式,因此我想以不改变 Glide 图像加载逻辑的方式编写 DataFetcher.loadData()。

我仍然很困惑,似乎无法开始。由于我已经为此苦苦挣扎了一周,因此我将非常感谢能够实现我的目标的一些示例代码。

标签: androidandroid-glide

解决方案


fun getImageUrl(callback: (String) -> Unit) {
//GET IMAGE URL AND RETURN IT WITH 
callback(imageUrl)
}

然后在你的 onBind 方法调用中

getImageUrl {
//LOAD IMAGE WITH GLIDE. THE URL WILL BE CALLED ‘it’ AS BELOW
Glide.with(this).load(it).into(imageView)
}

推荐阅读