本文共 1095 字,大约阅读时间需要 3 分钟。
现在好多APP在应用中会内嵌webview,好多时候需要监听webview是否加载成功与失败。当加载成功的时候会回调WebViewClient的onPageFinished方法;当加载失败的时候会回调WebViewClient的onReceived方法。但问题是在加载失败的时候同样会回调onPageFinished方法。
看过一些StackOverFlow上面的文章,说可以通过WebChromeClient的onProgressChanged方法,当判断进度到100的时候表示加载成功,但其实加载失败的时候同样进度会到100,所以也是不行的。
在公司项目开发过程中也遇到了这样的问题,当时找到2种解决这个问题的方法。
private boolean isSuccess = false;private boolean isError = false;public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); if (!isError) { isSuccess = true; //回调成功后的相关操作 } isError = false;}public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {super.onReceivedError(view, request, error); isError = true; isSuccess = false; //回调失败的相关操作}
原理总结:在访问失败的时候会首先回调onReceivedError,然后再回调onPageFinished。
这个方法不是适用所有人的,我当时可以用到这样的思路,主要是业务中只需要判断第一次的网页是否加载成功,只要第一次加载成功后后面的都可以交给html页面来解决加载状态。而加载成功前后的url是不一样的,举个例子:
首先启动webview时用到的url是, 这个在第一次打开app之前肯定是保存在本地的,或者是从登陆页面获取的,而加载成功以后的首页面就会变成 ,这样我们就可以通过onPageFinished方法中转入的url来判断是否是第一次加载成功后的页面了。
url.contains("#");
转载地址:http://fldrf.baihongyu.com/