Android項目中,難免會用到WebView 加載網頁內容,如果由于網絡異常等原因導致頁面內容無法加載出來的時候就會報錯,默認報錯內容如下圖:
Paste_Image.png
在上面的圖中我們可以看到,如果不做處理的話,報錯信息中會包含我們連接到的網址,但實際上我們可能不想讓用戶看到網址,那么這個時候我們就需要使用自定義的錯誤提示頁面。
既然想使用自定義錯誤提示,那我們就需要先知道啥時候出現了錯誤,監測錯誤的時候我們可以使用 WebViewClient 中的 onReceivedError() 方法,當有錯誤時就給出我們自定義的錯誤提示,具體代碼如下:
WebViewTestActivity01.java
/**
* Created by CnPeng on 2017/1/5. WebView 測試頁面1
*/
public class WebViewTestActivity01 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_webviewtest01);
init();
}
private void init() {
WebView webView = (WebView) findViewById(R.id.webviewTest1);
final String url_ = "http://blog.csdn.net/north1989/article/details/53471439";
webView.setWebViewClient(new WebViewClient() { //監測加載狀態
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); //指明要加載的頁面
return true; //返回true表示強制使用當前webView 顯示網頁內容,而不跳轉到默認瀏覽器
}
@Override //當發生錯誤時調用此方法
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
// 自定義錯誤提示頁面,灰色背景色,帶有文字,文字不要輸漢字,由于編碼問題漢字會變亂碼
String errorHtml = "<html><body style='background-color:#e5e5e5;'><h1>Page Not Found " +
"!</h1></body></html>";
view.loadData(errorHtml, "text/html", "UTF-8");
}
});
webView.loadUrl(url_);
}
}
注意:
A
WebViewClient 中能監測Error 的方法有四個,兩個onReceivedError(),其中一個廢棄了;一個onReceivedHttpError();一個onReceivedSslError()。我們只用onReceivedError()方法,為了確保低版本手機上也能過濾到Error ,也可以將廢棄的onReceivedError()寫上。千萬不要隨便用onReceivedHttpError,否則你的頁面會一直是你定義的錯誤提示!!!我也不知道 onReceivedSslError 到底是啥錯誤,所以。。。
B
上面展示的自定義錯誤頁面其實使我們用字符串定義的一個簡單的html頁面,加載這個頁面的時候,我們用的是 **loadData( ) ** 。在定義這個錯誤提示的時候,盡量不要用漢字,雖然在loadData()中定義編碼為utf-8 但似乎并不起作用,漢字還是變成了亂碼