Glide — 異常: 調(diào)試和報錯處理
原文:Exceptions: Debugging and Error Handling
作者:Norman Peitek
翻譯:Dexter0218
介紹完了Glide各種概念,我們要轉(zhuǎn)移到一個開發(fā)話題上。在這篇文章中,我們將展示給你一些有用的方法去debug你在使用Glide過程中所遇到的問題栅哀。
Glide 系列概覽
- 入門簡介
- 高級加載
- 適配器(ListView, GridView)
- 占位圖& 淡入淡出動畫
- 圖片大小 & 縮放
- 播放GIF & 視頻
- 緩存基礎(chǔ)
- 請求優(yōu)先級
- 縮略圖
- 回調(diào):定制view中使用SimpleTarget和ViewTarget
- 通知欄和桌面小控件的圖片加載
- 異常: 調(diào)試和報錯處理
- 自定義變換
- 用animate()定制動畫
- 整合網(wǎng)絡(luò)協(xié)議棧
- 用Modules定制Glide
- Glide Module 案例: 接受自簽名HTTPS證書
- Glide Module 案例: 自定義緩存
- Glide Module 案例: 通過加載自定義大小圖片優(yōu)化
- 動態(tài)使用 Model Loaders
- 如何旋轉(zhuǎn)圖片
- 系列綜述
本地調(diào)試
Glide的常規(guī)請求里提供了一個方法設(shè)置Log的層級蒸健。不幸地是究西,你沒法輕易在產(chǎn)品使用中輕易獲取货葬。但,也有一個很簡單的方法獲得Glide的調(diào)試log蘸炸。你只要通過adb shell,打開terminal尖奔,然后使用下面的命令行:
adb shell setprop log.tag.GenericRequest DEBUG
最后一部分DEBUG來自標(biāo)準(zhǔn)Android的log常量搭儒。因此,作為參數(shù)的遞增優(yōu)先級的選項如下:
- VERBOSE
- DEBUG
- INFO
- WARN
- ERROR
當(dāng)圖片不存在時提茁,會輸出下面的日志:
io.futurestud.tutorials.glide D/GenericRequest: load failed
io.futurestud.tutorials.glide D/GenericRequest: java.io.IOException: Request failed 404: Not Found
...
你已經(jīng)想到了淹禾,這只能在你有個真機連接到電腦上,并且正在調(diào)試你的應(yīng)用時才能用茴扁。為了在你的app中生成日志铃岔,你需要另外一個不同的方式。方案又是用回調(diào)峭火,我們會在后續(xù)的小節(jié)中介紹毁习。
基本的異常日志
Glide不提供直接獲取常規(guī)請求的日志智嚷,但是你可以在請求出錯時抓取異常的日志。例如纺且,如果圖片不存在盏道,Glide會(靜靜地)拋出一個異常,并顯示出你.erroer()
里指定的圖片隆檀。如果你明確想要知道異常摇天,創(chuàng)建一個listener,然后傳遞給Glide的.listener()
方法。
首先恐仑,創(chuàng)建一個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應(yīng)當(dāng)處理這個后果歧斟,比如顯示一個出錯占位圖纯丸,在onException
方法中返回false
是很重要的。
你可以在Glide中的構(gòu)造方法里設(shè)置listener
:
Glide
.with( context )
.load(UsageExampleListViewAdapter.eatFoodyImages[0])
.listener( requestListener )
.error( R.drawable.cupcake )
.into( imageViewPlaceholder );
.error()
是否設(shè)置不影響日志正常工作静袖。但只有在listener
的onException
方法里返回false
觉鼻,R.drawable.cupcake
才會顯示出來。
展望
這篇文章中队橙,你已經(jīng)學(xué)會了在使用Glide過程中如何debug和記錄異常坠陈。根據(jù)你的需求選擇適合你的方法,如果有疑問捐康,可以在評論中提出仇矾!
在下一篇文章中,我們會繼續(xù)更高級的主題解总。下次是自定義變換贮匕。