在Android SDK中,onReceivedError(WebView view, int errorCode, String description, String failingUrl)
已被弃用并替换为onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
。但是根据documentation:
请注意,与不推荐使用的回调版本不同,新版本 将为任何资源(iframe,图像等)调用版本,而不仅仅是 对于主页
我们有一个应用程序,在不推荐使用的onReceivedError
方法中,有一个代码可以显示本机视图,而不是让用户在WebView中看到错误。
我们希望用新方法替换已弃用的onReceivedError
方法。但我们不希望为主页面显示任何资源的错误的本机视图。
我们如何在新onReceivedError
中识别错误不是来自主页?
PS 1:我们不希望像this这样的解决方案存储主网址并将其与失败的网址进行核对。
PS 2:如果解决方案只是使用弃用的方法,那么对于新的Android版本,仍然可以保证它的保证是什么?
答案 0 :(得分:5)
您不必存储原始网址。您可以从WebView
传递给onReceivedError
方法获取它。它始终是用户看到的当前页面的完整URL。因此,您不必担心它们导航到不同的页面。
@Override
public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
if (request.getUrl().toString().equals(view.getUrl())) {
notifyError();
}
}
答案 1 :(得分:2)
WebResourceRequest
为您的方案提供isForMainFrame()
方法,该方法从API版本21开始提供:
来源:https://developer.android.com/reference/android/webkit/WebResourceRequest.html
答案 2 :(得分:0)
你可以像代码一样使用:
WebView wv = (WebView) findViewById(R.id.webView);
wv.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
Log.i("WEB_VIEW_TEST", "error code:" + errorCode);
// here your custom logcat like as share preference or database or static varible.
super.onReceivedError(view, errorCode, description, failingUrl);
}
});
祝你好运!