我曾尝试在shouldOverrideUrlLoading()方法内部和WebViewClient外部使用onReceivedError,甚至尝试在主Activity类的外部也做了尝试。但结果不稳定,我并不满意。所以我决定使用一个测试方法isOnline(),在调用loadUrl()之前先调用该方法。
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getBaseContext()
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo i = cm.getActiveNetworkInfo();
if ((i == null) || (!i.isConnected())) {
Toast toast = Toast.makeText(getBaseContext(),
"Error: No connection to Internet", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0);
toast.show();
return false;
}
return true;
}
那么这个onReceivedError在WebViewClient中,但是在overloadurlthingy方法之外。这似乎可以始终防止愚蠢的、傻笑的Android错误页面。
@Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
if (view.canGoBack()) {
view.goBack();
}
Toast toast = Toast.makeText(getBaseContext(), description,
Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.CENTER, 0, 0);
toast.show();
}
有些人可能认为这个很耗资源。不过,它并不像 Android 版 Facebook 和 Google+ 应用程序那样占用大量资源。也不像 Google 服务那样。老实说,我不介意使用一点这些应用程序的资源。叫我坏孩子吧...
onReceivedError
deprecated in API 23. Usepublic void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
- zackygaurav