安卓webview斷網處理


需求:webview在加載的時候如果網絡斷開,會顯示默認的錯誤界面,長得很丑,需要單獨寫一個頁面,在網路出錯的時候顯示,點擊重試以后重新加載網頁

乍看挺簡單的需求,但在實際過程中頁碰到了不少坑,主要是webview造成的,在此記錄一下。

 

一:如何判斷網絡出錯:

方案:在webviewClient的回調中監聽onReceiveError回調,如果走到這里,說明網絡出錯了,隱藏webview,顯示自定義出錯界面。

於是有了:

如果這么做,會有許多問題:

問題1:該函數是6.0才有的,6.0以下的手機只能用一個過時的回調:

解決方案:為了兼容,需要兩個回調都寫上,都進行處理

問題2: 在有些網頁加載以后,有些鏈接也會收到error回調,但是此時網絡是好的,比如新浪微博的文章,如果點擊以下文章,也會跑到該error回調中來。

解決方案:由於網絡斷開的時候的description是獨有的(errorCode不行),所以可以用description進行判斷:

其中

注意,error.getDescription需要在api > 安卓6.0才能用,需要添加注解@RequireApi。

 

二:如何恢復顯示

方案:出錯的判斷已經好了,那么如何在網絡恢復的時候顯示webview呢?因為沒有網絡恢復的回調,自然想到用一個Flag來記錄網絡是否出錯。即在onPageStarted的時候flag為false,即沒有出錯,如果回調到onError里,讓flag=true,此時在onPageFinished回調里就能知道網頁有沒有出錯了。

問題:從斷網到網絡恢復,點擊重試,在某些頁面下會出問題(比如新浪微博文章),即:網頁會閃現以下默認的error頁面,原因是什么呢?

經過一番debug終於發現,onPageFinished這個回調,在有些網頁(比如新浪微博)會調兩次,第一次webview的progress只有70 第二次是100,也就是說網頁沒加載完,onPageFinished就已經調用了。

解決方案:判斷progress,只有等於100時,才顯示webview,隱藏自定義出錯界面。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM