Glide 3.7.0升级4.13.0无法解析BitmapRequestBuilder如何适配
问题原因
Glide 从3.x版本升级到4.x版本做了大量API破坏性变更,原3.x版本中的BitmapRequestBuilder类已被移除,asBitmap()调用时机、同步加载目标的方法名也做了调整,直接复用3.x版本的写法会触发符号无法解析的报错。
注意:Glide 4.x中强制要求
asBitmap()这类指定资源类型的方法,必须在load()方法之前调用,这也是之前在load()之后调用asBitmap()依旧报错的核心原因之一。
适配Glide 4.13.0的修改方案
- 首先确认模块级
build.gradle中的依赖配置正确:
dependencies { implementation 'com.github.bumptech.glide:glide:4.13.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.13.0' }
- 替换原有代码逻辑,核心变更点:
- 移除已废弃的
BitmapRequestBuilder类型,改用RequestBuilder<Bitmap>作为构建器类型 - 将
asBitmap()调用移动到load()方法之前 - 同步加载指定宽高图片时,用
submit(int width, int height)替换原3.x版本的into(width, height)方法 - 给
FutureTarget指定Bitmap泛型,省去不必要的强转操作
- 移除已废弃的
修改后的可运行代码如下:
import android.content.Context; import android.graphics.Bitmap; import android.util.DisplayMetrics; import com.bumptech.glide.Glide; import com.bumptech.glide.request.FutureTarget; import com.bumptech.glide.request.RequestBuilder; // 替换为你项目中Constants类的实际包路径 import com.your.package.Constants; import java.util.concurrent.ExecutionException; private Bitmap loadImage(Context context, String pathName) throws ExecutionException, InterruptedException { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); int width = metrics.widthPixels; int height = metrics.heightPixels; RequestBuilder<Bitmap> builder = Glide.with(context) .asBitmap() .load(Constants.IMAGE_DOWNLOAD + pathName); FutureTarget<Bitmap> futureTarget = builder.submit(width, height); return futureTarget.get(); } private Bitmap loadImageForNoti(Context context, String pathName) throws ExecutionException, InterruptedException { DisplayMetrics metrics = context.getResources().getDisplayMetrics(); int width = metrics.widthPixels; int height = metrics.heightPixels; RequestBuilder<Bitmap> builder = Glide.with(context) .asBitmap() .load(pathName); FutureTarget<Bitmap> futureTarget = builder.submit(width, height); return futureTarget.get(); }
额外注意事项
- 上述同步加载方法必须在子线程中调用,如果在主线程调用
futureTarget.get()会触发线程阻塞,甚至导致ANR - 如果不需要严格指定加载宽高,可以直接调用无参的
submit()方法,Glide会自动根据设备分辨率做适配 - 如果需要配置占位图、错误图、缓存策略,可以在
load()之后链式追加对应配置,逻辑和3.x版本基本一致
内容的提问来源于stack exchange,提问作者suraj gaikwad
相关产品推荐
相关产品推荐

