Android WebView监听加载失败_替换WebView加载网页失败时的页面
程序员文章站
2022-03-01 12:55:20
...
在android中、使用webview打开界面失败时、会显示系统默认的一个失败页面、但是这个页面太丑、想自己写一个一面在加载失败时显示自己的页面、方法很简单、先在asset下面放一个静态的网页、然后在WebViewClient中重写onReceivedError()方法、代码如下
private class MessageWebViewClient extends WebViewClient { CustomProgressDialog mProgressDialog = null; @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { // TODO Auto-generated method stub super.onReceivedError(view, errorCode, description, failingUrl); Toast.makeText(TeacherActivity.this, "服务器异常", Toast.LENGTH_SHORT).show(); mWebview.loadUrl("file:///android_asset/errorpage/error.html"); isPageError = true; } }
上面的代码虽然显示了自己的错误页面、但是在点击返回时返现返回的还是默认的失败页面、说明在加载我自己的网页之前已经加载过默认的界面、我的解决方法是做一个flag、如果是错误页面、直接finish();页面
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub if(keyCode==KeyEvent.KEYCODE_BACK) { if(mWebview.canGoBack() && !isPageError) { mWebview.goBack();//返回上一页面 return true; } else { finish(); } } return super.onKeyDown(keyCode, event); }
当然也可以提前验证手机是否连接网络、WebView的实质就是loadUrl、所以前提是设备接入网络、那么这个如何判断呢?看代码吧:
// 网络状态 public boolean isNetworkConnected(Context context) { if (context != null) { ConnectivityManager mConnectivityManager = (ConnectivityManager) context .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager .getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } } return false; }
最后给贴上Demo的源代码、希望对大家有用、有兴趣的哥们可以下载看看
源代码下载链接: http://dwtedx.com/download.html?bdkey=s/1qWDZlt6 密码: ycc7