其他分享
首页 > 其他分享> > android-在使用不推荐使用的版本时,对不推荐使用和不推荐使用的变体两次调用了shouldInterceptRequest

android-在使用不推荐使用的版本时,对不推荐使用和不推荐使用的变体两次调用了shouldInterceptRequest

作者:互联网

我有webView覆盖shouldInterceptRequest方法:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
    WebResourceResponse response = proxy.getWebResourceResponse(request.getUrl(), request.getMethod(), request.getRequestHeaders());
    if (response == null) {
        return super.shouldInterceptRequest(view, request);
    } else {
        return response;
    }
}

@SuppressWarnings("deprecation")
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
    WebResourceResponse response = proxy.getWebResourceResponse(Uri.parse(url), "GET", null);
    if (response == null) {
        return super.shouldInterceptRequest(view, url);
    } else {
        return response;
    }
}

问题是在棒棒糖上这两种方法都被调用了.因此,我认为我应该指定不赞成使用的版本仅应用于旧的Android版本.与RequiresApi完全相反
如果可以通过制作复制粘贴类并使用if-else根据Android版本选择类来解决问题,但这确实很丑.

更新.更新以更好地反映问题.

解决方法:

默认实现WebViewClient in Android source codes从较新的版本调用不赞成使用的shouldInterceptRequest版本,将请求中的当前URL作为字符串传递:

@Deprecated
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
{
    return null;
}

public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
{
    return shouldInterceptRequest(view, request.getUrl().toString());
}

由于您从自定义WebViewClient实现中调用了默认的Lollipop特定处理程序(当request为null时,使用super.shouldInterceptRequest(view,request)),因此它将依次调用已弃用的处理程序的重写实现.

您不应从新的实现中调用super方法,以免执行不受欢迎的方法.

标签:android-webview,android-api-levels,android,android-min-sdk
来源: https://codeday.me/bug/20191026/1934324.html