Android項(xiàng)目中化借,難免會(huì)用到WebView 加載網(wǎng)頁內(nèi)容潜慎,如果由于網(wǎng)絡(luò)異常等原因?qū)е马撁鎯?nèi)容無法加載出來的時(shí)候就會(huì)報(bào)錯(cuò)捡多,默認(rèn)報(bào)錯(cuò)內(nèi)容如下圖:
在上面的圖中我們可以看到蓖康,如果不做處理的話,報(bào)錯(cuò)信息中會(huì)包含我們連接到的網(wǎng)址垒手,但實(shí)際上我們可能不想讓用戶看到網(wǎng)址蒜焊,那么這個(gè)時(shí)候我們就需要使用自定義的錯(cuò)誤提示頁面。
既然想使用自定義錯(cuò)誤提示科贬,那我們就需要先知道啥時(shí)候出現(xiàn)了錯(cuò)誤泳梆,監(jiān)測(cè)錯(cuò)誤的時(shí)候我們可以使用 WebViewClient 中的 onReceivedError() 方法,當(dāng)有錯(cuò)誤時(shí)就給出我們自定義的錯(cuò)誤提示榜掌,具體代碼如下:
WebViewTestActivity01.java
/**
* Created by CnPeng on 2017/1/5. WebView 測(cè)試頁面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() { //監(jiān)測(cè)加載狀態(tài)
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url); //指明要加載的頁面
return true; //返回true表示強(qiáng)制使用當(dāng)前webView 顯示網(wǎng)頁內(nèi)容优妙,而不跳轉(zhuǎn)到默認(rèn)瀏覽器
}
@Override //當(dāng)發(fā)生錯(cuò)誤時(shí)調(diào)用此方法
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
// 自定義錯(cuò)誤提示頁面,灰色背景色憎账,帶有文字套硼,文字不要輸漢字,由于編碼問題漢字會(huì)變亂碼
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 中能監(jiān)測(cè)Error 的方法有四個(gè)胞皱,兩個(gè)onReceivedError()邪意,其中一個(gè)廢棄了;一個(gè)onReceivedHttpError()反砌;一個(gè)onReceivedSslError()雾鬼。我們只用onReceivedError()方法,為了確保低版本手機(jī)上也能過濾到Error 宴树,也可以將廢棄的onReceivedError()寫上策菜。千萬不要隨便用onReceivedHttpError,否則你的頁面會(huì)一直是你定義的錯(cuò)誤提示!W鋈搿冒晰!我也不知道 onReceivedSslError 到底是啥錯(cuò)誤,所以竟块。壶运。。
B
上面展示的自定義錯(cuò)誤頁面其實(shí)使我們用字符串定義的一個(gè)簡(jiǎn)單的html頁面浪秘,加載這個(gè)頁面的時(shí)候蒋情,我們用的是 **loadData( ) ** 。在定義這個(gè)錯(cuò)誤提示的時(shí)候耸携,盡量不要用漢字棵癣,雖然在loadData()中定義編碼為utf-8 但似乎并不起作用,漢字還是變成了亂碼