glide:异常: 调试和报错处理

本地调试

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()是否设置不影响日志正常工作。但只有在listeneronException方法里返回falseR.drawable.cupcake才会显示出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值