使用Glide4.0加载图片 没有clean出错了

2017-7-26 遇到的一点小问题
图片加载最开始用的UIL,后面项目用的Picasso,但一直没找到Picasso清除全部缓存的方法,所以这次项目打算换一个。原本纠结是Fresco还是Glide。虽然Fresco有中文文档,但四木说Fresco的包太大了,自定义imageView用起来也麻烦,比较适合加载图片很多的应用。所以试了下Glide
按要求先依赖库

repositories {
  mavenCentral() // jcenter() works as well because it pulls from Maven Central
}

dependencies {
  compile 'com.github.bumptech.glide:glide:4.0.0-RC1'
  compile 'com.android.support:support-v4:25.3.1'
  annotationProcessor 'com.github.bumptech.glide:compiler:4.0.0-RC1'
}

然后试了句简单的GlideApp.with(this).load("url").into(imageView);加载图片,没想到竟然报错了java.lang.AbstractMethodError

java.lang.AbstractMethodError: abstract method "void com.bumptech.glide.module.RegistersComponents.registerComponents(android.content.Context, com.bumptech.glide.Registry)"
at com.bumptech.glide.Glide.initGlide(Glide.java:217)
at com.bumptech.glide.Glide.get(Glide.java:154)
at com.bumptech.glide.Glide.getRetriever(Glide.java:514)
at com.bumptech.glide.Glide.with(Glide.java:540)

java.lang.AbstractMethodError

文档没看到要初始化,再看一下,有说要创建一个 AppGlideModule ,按要求拷进去。

import com.bumptech.glide.annotation.GlideModule;
import com.bumptech.glide.module.AppGlideModule;
   
@GlideModule
public final class MyAppGlideModule extends AppGlideModule {}

结果还是报错java.lang.AbstractMethodError,网上找了圈没找到解决办法,只好又仔细看文档,原来要先Bulid -> Clean Project。照着做,重试,可以了。

.

因为用的版本是4.0.0,和之前的3.8.0或者更早的差别很多,所以网上那些增加的功能很多不能按原来的方式去做,需要另外写。
比如之前设置的加载中显示的图片.placeholder(R.drawable.aaa)和加载失败显示的图片.error(R.drawable.bbb),现在要换成.apply(new RequestOptions().placeholder(R.drawable.aaa).error(R.drawable.bbb))。类似的设置圆形圆角等等操作,网上还很多。当然,要按以前写法也是可以的,相关文章网上也很多。

.

有说项目有用okHttp3,加个依赖包会更好。所以按文档写的,加上compile 'com.github.bumptech.glide:okhttp3-integration:1.5.0@aar',结果一运行又出现java.lang.AbstractMethodError错误提示。
网上找了下,都是3.X的register方法Glide.get(this).register(GlideUrl.class,InputStream.class,newOkHttpUrlLoader.Factory(newOkHttpClient()));,说是4.0不用初始化。没找到原因,只好又回去看文档,这才注意文档刚开始写着For information on Glide v4, see the documentation. This wiki covers Glide v3 only.好吧,原来这个是3的文档,看来是版本的问题了。

使用Glide4.0加载图片 没有clean出错了_第1张图片
Glide截图

看了下 版本页,都是4.0.0。所以全部改成 4.0.0-RC1就可以了。
glideVersion = '4.0.0-RC1'

compile "com.github.bumptech.glide:glide:$rootProject.ext.glideVersion"
annotationProcessor "com.github.bumptech.glide:compiler:$rootProject.ext.glideVersion"
compile "com.github.bumptech.glide:okhttp3-integration:$rootProject.ext.glideVersion@aar"
compile "com.github.bumptech.glide:recyclerview-integration:$rootProject.ext.glideVersion@aar"
使用Glide4.0加载图片 没有clean出错了_第2张图片
glide/releases

2017-9-27

使用Glide下载图片,不使用.asBitmap()方法,则回调的是Drawable不是Bitmap。

Glide.with(this).asBitmap().load(url).into(new SimpleTarget(150, 150) {
  @Override
  public void onResourceReady(Bitmap resource, Transition transition) {
    L.e("下载完成__onResourceReady");
  }
});

回调的顺序为
onLoadStarted --> onStart--> onResourceReadyonLoadFailed--> onStop --> onDestroy --> onLoadCleared

.

先记录一下,下次遇到问题再补充

你可能感兴趣的:(使用Glide4.0加载图片 没有clean出错了)