1. 程式人生 > >Glide 入門到精通之十一 ——異常:除錯和錯誤處理

Glide 入門到精通之十一 ——異常:除錯和錯誤處理

Glide 的 GeneralRequest 類提供了一個方法去設定 log 的級別。不幸的是,在生產過程中,使用這個類並不容易。然而,有一個非常簡單的方法去獲得 Glide 的除錯日誌。你所要做的就是通過 adb 的 shell 來啟用。開啟你的終端,使用以下命令:

adb shell setprop log.tag.GenericRequest DEBUG  

最後一個 DEBUG 來自標準的 Android 日誌常量。因此,你你可以選擇 debug 的優先順序:

  • 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。為了記錄在生產(釋出版本)中的 App,你將需要用一個不同的方式。答案是,依然用回撥,我們在下一節來探討。

常規異常日誌記錄

Glide 不能直接去訪問 GenericRequest 類去設定日誌,但萬一一些請求出錯了你是可以捕獲異常的。比如,如果圖片不可用,Glide 會(默默地)丟擲一個異常,並且顯示一個 drawable ,如果你已經指定了 .error() 的話。

如果你明確想要知道這個異常,建立一個監聽並傳 .listener() 方法到 Glide 的建造者中。

首先,建立一個監聽作為一個欄位物件去避免垃圾回收(注:之前說過不要用匿名內部類的形式):

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 方法中, 你可以捕獲錯誤,並且你可以決定要做什麼,比如,打個 log。重要的是如果 Glide 要在後續處理的話,如顯示一個錯誤的佔位符等情況的話,你需要返回了 false 在 onException 方法中。

你可以設定一個監聽在 Glide 建造者中:

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

要使日誌工作正常的話,.error() 並不是必須的。然而,如果你在監聽的 onException 中返回 false 的話,R.drawable.cupcake 只是顯示出來而已。

Outlook

這篇部落格中,你已經學習了在 Glide 中通過一些方法去除錯和列印異常。根據需要,選一種方式吧。

在下篇部落格中,我們會走向更加高階的話題。下週的話題的自定義轉化!

關注我的公眾號,輕鬆瞭解和學習更多技術
這裡寫圖片描述