Glide — 异常: 调试和报错处理
原文:Exceptions: Debugging and Error Handling
作者:Norman Peitek
翻译:Dexter0218
介绍完了Glide各种概念,我们要转移到一个开发话题上。在这篇文章中,我们将展示给你一些有用的方法去debug你在使用Glide过程中所遇到的问题。
Glide 系列概览
- 入门简介
- 高级加载
- 适配器(ListView, GridView)
- 占位图& 淡入淡出动画
- 图片大小 & 缩放
- 播放GIF & 视频
- 缓存基础
- 请求优先级
- 缩略图
- 回调:定制view中使用SimpleTarget和ViewTarget
- 通知栏和桌面小控件的图片加载
- 异常: 调试和报错处理
- 自定义变换
- 用animate()定制动画
- 整合网络协议栈
- 用Modules定制Glide
- Glide Module 案例: 接受自签名HTTPS证书
- Glide Module 案例: 自定义缓存
- Glide Module 案例: 通过加载自定义大小图片优化
- 动态使用 Model Loaders
- 如何旋转图片
- 系列综述
本地调试
Glide的常规请求里提供了一个方法设置Log的层级。不幸地是,你没法轻易在产品使用中轻易获取。但,也有一个很简单的方法获得Glide的调试log。你只要通过adb shell,打开terminal,然后使用下面的命令行:
adb shell setprop log.tag.GenericRequest DEBUG
最后一部分DEBUG来自标准Android的log常量。因此,作为参数的递增优先级的选项如下:
- VERBOSE
- DEBUG
- INFO
- WARN
- ERROR
当图片不存在时,会输出下面的日志:
io.futurestud.tutorials.glide D/GenericRequest: load failed
io.futurestud.tutorials.glide D/GenericRequest: java.io.IOException: Request failed 404: Not Found
...
你已经想到了,这只能在你有个真机连接到电脑上,并且正在调试你的应用时才能用。为了在你的app中生成日志,你需要另外一个不同的方式。方案又是用回调,我们会在后续的小节中介绍。
基本的异常日志
Glide不提供直接获取常规请求的日志,但是你可以在请求出错时抓取异常的日志。例如,如果图片不存在,Glide会(静静地)抛出一个异常,并显示出你.erroer()
里指定的图片。如果你明确想要知道异常,创建一个listener,然后传递给Glide的.listener()
方法。
首先,创建一个listener
作为一个字段对象,避免被垃圾回收:
private RequestListener<String, GlideDrawable> requestListener = new RequestListener<String, GlideDrawable>() {
@Override
public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
// todo log exception
// important to return false so the error placeholder can be placed
return false;
}
@Override
public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
return false;
}
};
在onException
方法中,你可以抓取问题,并决定你需要做什么,比如记录日志。如果Glide应当处理这个后果,比如显示一个出错占位图,在onException
方法中返回false
是很重要的。
你可以在Glide中的构造方法里设置listener
:
Glide
.with( context )
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.listener( requestListener )
.error( R.drawable.cupcake )
.into( imageViewPlaceholder );
.error()
是否设置不影响日志正常工作。但只有在listener
的onException
方法里返回false
,R.drawable.cupcake
才会显示出来。
展望
这篇文章中,你已经学会了在使用Glide过程中如何debug和记录异常。根据你的需求选择适合你的方法,如果有疑问,可以在评论中提出!
在下一篇文章中,我们会继续更高级的主题。下次是自定义变换。