java.lang.NoSuchMethodError: No virtual method load(Ljava/lang/Object;)

1.出现这个问题是因为我的项目依赖的LoopViewPager框架依赖了较旧的glide3.7.0版本,而我的项目所依赖的另一个框架也依赖了最新的glide4.7.1版本,两个版本之间冲突项目不能运行,为了解决该问题,我统一把它们的glide依赖去掉了,转而让我项目里引用最新版的glide4.7.1,使得那两个开源库转用我自己引入的glide,但是就报了这个bug;

 

2.该报错的意思就是:没有load(Ljava/lang/Object)方法!没道理啊,我去查看了源码,明明引入的Glide类都是一个包里的,再说load方法是Glide开源框架的核心方法,怎么会去掉呢?!经我细心一看,原来问题出在传参上:

,分析:应该是Glide在3.0在升4.0版本时做了这个改动!

 

3.解决:到了这里报错的原因已经很明朗了,解决办法无非两个,升级LoopViewPager框架,或者让项目使用低版本的Glide;

可是使用低版本的Glide另一个依赖又报错!让作者升级LoopViewPager吧,可是LoopViewPager已经停更两年了,算了吧,又急着用,所以我干脆copy人家的源代码自己升级了

4.解决后:发现步骤2的分析是错的,我只是把项目迁移过来后就能正常用了,不报错了,我并没有改动原来的代码,而原本人家的代码就对,至于为什么没迁移过来时报错已经不得而知!可能跟下面第5步又关

5.注意:新版Glide的load方法返回的是RequestBulider,而旧版返回的是DrawableTypeRequest导致certerCrop方法不能用!!从而图片不能按照给定的imgview的宽高来裁剪图片,原因正在调查,如果实在解决不了可以通过wasabeef/glide-transformations的开源框架来解决,最后还是解决了,通过查看Glide v4的开发文档解决的,有简体中文版https://muyangmin.github.io/glide-docs-cn/doc/transformations.html,关键字如下图,我并没有去继续探究Glide的前世今生,而是直接按照新版本的用法来用就对了

java.lang.NoSuchMethodError: No virtual method load(Ljava/lang/Object;)_第1张图片

你可能感兴趣的:(安卓开发遇到的问题及解决)