带有ProgressBar和Error句柄的WebView

时间:2017-04-05 02:14:48

标签: android webview

我有一个WebView(webView),ProgressBar(进度)和RelativeLayout(错误)。我需要显示ProgressBar直到页面加载,并且需要在页面成功加载后显示WebView。如果有任何错误,它应该显示RelativeLayout(错误)。问题是如果没有网络连接,则会显示WebView。我如何使其工作?这是我的代码:

    webView.setWebViewClient(new WebViewClient(){

        @Override
        public void onLoadResource(WebView view, String url) {
            webView.setVisibility(View.GONE);
            progress.setVisibility(View.VISIBLE);
            error.setVisibility(View.GONE);
            super.onLoadResource(view, url);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            webView.setVisibility(View.VISIBLE);
            progress.setVisibility(View.GONE);
            error.setVisibility(View.GONE);
            super.onPageFinished(view, url);
        }

        @Override
        public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError errorWebResource) {
            webView.setVisibility(View.GONE);
            progress.setVisibility(View.GONE);
            error.setVisibility(View.VISIBLE);
            super.onReceivedError(view, request, errorWebResource);
        }

   });

    webView.loadUrl("https://www.google.com");

1 个答案:

答案 0 :(得分:0)

  1. 一般而言,您希望在自定义代码之前执行超级调用,因此您可能希望从那里开始。 如果您不关心超级通话,则可能需要将其删除。

  2. 您可能想在onPageFinished中放置一个断点。我怀疑,当没有互联网连接时,你会得到这样的电话。

  3. 您的问题可能不在错误部分,但在执行webView.loadUrl();

  4. 我建议你查看这个已接受的答案:Detect whether there is an Internet connection available on Android。如果您不喜欢这个答案,那么在SO中如何检查网络连接还有其他数百个答案。< / p>

    那么你的电话会是这样的:

    if (isNetworkAvailable) {
        webView.loadUrl("https://www.google.com");
    } else {
        error.setVisibility(View.VISIBLE);
    }
    

    这样,如果没有网络连接,它甚至不会尝试拨打电话。