在APP和网页交互时,很有可能出现加载失败的情况。
为了不让用户看到上述令人崩溃的默认失败页面,这里进行一下简单处理!
1.404错误
webView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
//TODO
}
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
//TODO
}
这种错误是挺奇怪的,上述onReceiveError根本不会调用!搜索了好久,见网上有人这么解决:
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
CharSequence pnotfound = "404";
if (title.contains(pnotfound)) {
view.stopLoading();
view.loadUrl(NOT_FOUND_PAGE);
}
}
});
经测试上述关系是成立的,NOT_FOUND_PAGE——对应于一个本地网页。
2.其他错误:
view.loadUrl(TIME_OUT_PAGE);
在onReceiveError进行捕获。这该方法内,加载一张本地网页就ok了!注意一点,如果手机没有连入网络也会走这里!
3.本地网页写法:
<html>
<body>
<div>
<table width="50%" height="50%" >
<tr>
<td>
<p style="text-align:center;"><img src="time_out.png"></p>
</td>
</tr>
</table>
</div>
</body>
</html>
没有实现居中垂直对齐,这个网页在pc Chrome中是可以居中对齐的,对网页是外行,这里就不研究了。
4.完整java代码:
package com.hang.androidtestdemo;
import android.annotation.TargetApi;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
public class MainActivity extends FragmentActivity {
WebView webView;
public static final String NOT_FOUND_PAGE = "file:///android_asset/not_found.html";
public static final String TIME_OUT_PAGE = "file:///android_asset/time_out.html";
public static final String TEST_URL = "http://www.dingdongfm.com/wechat/Share.do?Fn=NewsShare&RowKey=26309149645788628&type=0&userId=vT3N38Aw";
public static final String ERROR_PAGE = "http://www.dingdongfm.com/karbonn/add/apk//3_1/";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
webView = new WebView(this);
setContentView(webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(TEST_URL);
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
CharSequence pnotfound = "404";
if (title.contains(pnotfound)) {
view.stopLoading();
view.loadUrl(NOT_FOUND_PAGE);
}
}
});
webView.setWebViewClient(new WebViewClient() {
@SuppressWarnings("deprecation")
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
super.onReceivedError(view, errorCode, description, failingUrl);
// Handle the error
view.loadUrl(TIME_OUT_PAGE);
}
@TargetApi(android.os.Build.VERSION_CODES.M)
@Override
public void onReceivedError(WebView view, WebResourceRequest req, WebResourceError rerr) {
onReceivedError(view, rerr.getErrorCode(), rerr.getDescription().toString(), req.getUrl().toString());
}
});
}
}