Glide入門教程——12.異常: 調(diào)試和報(bào)錯(cuò)處理

Glide — 異常: 調(diào)試和報(bào)錯(cuò)處理

原文:Exceptions: Debugging and Error Handling
作者:Norman Peitek
翻譯:Dexter0218

介紹完了Glide各種概念,我們要轉(zhuǎn)移到一個(gè)開發(fā)話題上。在這篇文章中,我們將展示給你一些有用的方法去debug你在使用Glide過程中所遇到的問題。

Glide 系列概覽

  1. 入門簡介
  2. 高級加載
  3. 適配器(ListView, GridView)
  4. 占位圖& 淡入淡出動(dòng)畫
  5. 圖片大小 & 縮放
  6. 播放GIF & 視頻
  7. 緩存基礎(chǔ)
  8. 請求優(yōu)先級
  9. 縮略圖
  10. 回調(diào):定制view中使用SimpleTarget和ViewTarget
  11. 通知欄和桌面小控件的圖片加載
  12. 異常: 調(diào)試和報(bào)錯(cuò)處理
  13. 自定義變換
  14. 用animate()定制動(dòng)畫
  15. 整合網(wǎng)絡(luò)協(xié)議棧
  16. 用Modules定制Glide
  17. Glide Module 案例: 接受自簽名HTTPS證書
  18. Glide Module 案例: 自定義緩存
  19. Glide Module 案例: 通過加載自定義大小圖片優(yōu)化
  20. 動(dòng)態(tài)使用 Model Loaders
  21. 如何旋轉(zhuǎn)圖片
  22. 系列綜述

本地調(diào)試

Glide的常規(guī)請求里提供了一個(gè)方法設(shè)置Log的層級。不幸地是,你沒法輕易在產(chǎn)品使用中輕易獲取。但,也有一個(gè)很簡單的方法獲得Glide的調(diào)試log。你只要通過adb shell,打開terminal,然后使用下面的命令行:

adb shell setprop log.tag.GenericRequest DEBUG  

最后一部分DEBUG來自標(biāo)準(zhǔn)Android的log常量。因此,作為參數(shù)的遞增優(yōu)先級的選項(xiàng)如下:

  • VERBOSE
  • DEBUG
  • INFO
  • WARN
  • ERROR

當(dāng)圖片不存在時(shí),會(huì)輸出下面的日志:

io.futurestud.tutorials.glide D/GenericRequest: load failed  
io.futurestud.tutorials.glide D/GenericRequest: java.io.IOException: Request failed 404: Not Found  
...

你已經(jīng)想到了,這只能在你有個(gè)真機(jī)連接到電腦上,并且正在調(diào)試你的應(yīng)用時(shí)才能用。為了在你的app中生成日志,你需要另外一個(gè)不同的方式。方案又是用回調(diào),我們會(huì)在后續(xù)的小節(jié)中介紹。

基本的異常日志

Glide不提供直接獲取常規(guī)請求的日志,但是你可以在請求出錯(cuò)時(shí)抓取異常的日志。例如,如果圖片不存在,Glide會(huì)(靜靜地)拋出一個(gè)異常,并顯示出你.erroer()里指定的圖片。如果你明確想要知道異常,創(chuàng)建一個(gè)listener,然后傳遞給Glide的.listener()方法。

首先,創(chuàng)建一個(gè)listener作為一個(gè)字段對象,避免被垃圾回收:

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)處理這個(gè)后果,比如顯示一個(gè)出錯(cuò)占位圖,在onException方法中返回false是很重要的。

你可以在Glide中的構(gòu)造方法里設(shè)置listener:

Glide  
    .with( context )
    .load(UsageExampleListViewAdapter.eatFoodyImages[0])
    .listener( requestListener )
    .error( R.drawable.cupcake )
    .into( imageViewPlaceholder );

.error()是否設(shè)置不影響日志正常工作。但只有在listeneronException方法里返回false,R.drawable.cupcake才會(huì)顯示出來。

展望

這篇文章中,你已經(jīng)學(xué)會(huì)了在使用Glide過程中如何debug和記錄異常。根據(jù)你的需求選擇適合你的方法,如果有疑問,可以在評論中提出!

在下一篇文章中,我們會(huì)繼續(xù)更高級的主題。下次是自定義變換。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,716評論 25 709
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 昨天收拾屋子的時(shí)候找出很多玩具小兵。那是我童年時(shí)最愛的玩具。 童年時(shí)經(jīng)常和哥哥玩“打仗”的游戲:我們兩個(gè)是司令官,...
    小羽回憶鋪閱讀 566評論 0 1
  • 在iOS10之后需要在Info.plist中,添加新的字段獲取權(quán)限,否則在iOS10上運(yùn)行會(huì)導(dǎo)致崩潰。下面是一些常...
    mydisc1閱讀 238評論 0 0
  • 每個(gè)人每件事都不是獨(dú)立存在的,你和周圍的一花一草,一人一物息息相關(guān)!組成一個(gè)世界,而這個(gè)世界又包括你,你又是另外一...
    洛美的瑪雅簡書閱讀 549評論 0 2

友情鏈接更多精彩內(nèi)容