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)
文档没看到要初始化,再看一下,有说要创建一个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的文档,看来是版本的问题了。
看了下版本页,都是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"
2017-9-27
使用Glide下载图片,不使用.asBitmap()
方法,则回调的是Drawable不是Bitmap。
Glide.with(this).asBitmap().load(url).into(new SimpleTarget<Bitmap>(150, 150) {
@Override
public void onResourceReady(Bitmap resource, Transition<? super Bitmap> transition) {
L.e("下载完成__onResourceReady");
}
});
回调的顺序为
onLoadStarted --> onStart--> onResourceReady或 onLoadFailed--> onStop --> onDestroy --> onLoadCleared
.
先记录一下,下次遇到问题再补充