安卓Webview捕获错误的URL

6
在我的应用程序中,我从 web 服务中接收到 URL 字符串,并将其加载到 WebView 中。
mainContentText = (WebView) findViewById(R.id.mainContentText); 
mainContentText.getSettings().setJavaScriptEnabled(true);
mainContentText.setWebViewClient(new CustomWebClient());

mainContentText.loadUrl(url);

private class CustomWebClient extends WebViewClient{

        private static final String TAG = "WebWiewActivity";

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.d(TAG, "loading: " + url);
            return false;
        }

        @Override
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            super.onReceivedError(view, errorCode, description, failingUrl);
            Log.e(TAG, String.format("*ERROR*  Code: %d  Desc: %s  URL: %s", errorCode, description, failingUrl));
        }
    }

在测试URL不正确的情况下(例如随机字符串,url = "abc"),我只收到默认错误页面,但是没有在onReceivedErrorshouldOverrideUrlLoading回调函数中得到任何信息或异常。如何捕获这种情况?

2个回答

3

我也遇到了同样的问题,我是这样解决的:

private class CustomWebClient extends WebViewClient {

    private static final String TAG = "WebWiewActivity";

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        Log.d(TAG, "loading: " + url);
        return false;
    }

    @Override
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
        super.onReceivedError(view, errorCode, description, failingUrl);

        *************************************
        // do error handling
        *************************************
    }

    @Override
    public void onPageFinished(String url) {
        // url validation
        if (!Patterns.WEB_URL.matcher(url).matches()) {
            *************************************
            // do error handling
            *************************************
        }
    }
}

我在 onPageFinished(String url) 方法中添加了一些逻辑来检查URL是否有效,当URL无效时(例如随机字符串,url = "abc"),您可以捕获异常。


0
如果WebView无法处理URL,则在onPageStarted回调中似乎会返回“about:blank”。不确定这是否比Xiaozou的答案更好或更差。
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        if (url.equals("about:blank"))
            // handle no connection
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接