如何隐藏Volley的默认“不可用”网页

时间:2017-01-10 17:21:45

标签: android webview android-volley

我使用Volley库将json请求发送到REST服务。然后解析json结果并在webView中显示。它正常工作,除了它在加载时显示“网页不可用”。加载数据后,此页面将消失。

我在加载过程中放置​​了一个进度对话框,但它并没有完全隐藏默认网页。你有什么主意吗?谢谢!

AfterProcessingTime.pastFirstElementInPane(Duration.standardMinutes(1))

2 个答案:

答案 0 :(得分:1)

上面的答案仍显示自定义错误页面显示之前的“网页不可用”页面。

我的解决方案是检查信息是否已从REST API下载并最终显示我的自定义错误页面。

程序是这样的:

  1. 在联系REST服务之前隐藏webview
  2. 在我的搜索(字符串输入)函数中,从REST api下载信息并检查是否发生错误

    @Override
    
    public void onErrorResponse(VolleyError error) {
    
        hideProgressDialog();
        errorHappened = true;
    }
    
  3. 覆盖WebClient的onPageFinished,并在发生错误时显示自定义网页。因为onPageFinished一直被调用,所以我放了两个布尔值以确保错误页面只加载一次。否则,当片段关闭时,它可能会导致问题。 我在webview下面放了一个按钮,以便在发生错误时关闭片段。没有错误发生时不显示。

      WebViewClient client = new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            if(errorHappened && !errorShown){
                webView.loadUrl("file:///android_asset/error.html");
                webView.setVisibility(View.VISIBLE);
                errorShown = true;
                buttonClose.setVisibility(View.VISIBLE);
            }
        }
        //... other code
    
       };
       webView.setWebViewClient(client);
       // Show the web page
       webView.loadDataWithBaseURL("file:///android_asset/", webPage, "text/html", "utf-8", null);
       webView.setVisibility(View.VISIBLE);
    

答案 1 :(得分:0)

我不知道你是否还需要答案。 为了以防万一,对于任何能够到达这里的人来说,解决方案相当简单。 它应该足以覆盖onReceivedError的{​​{1}}方法,并提供错误/加载页面来覆盖默认值。

例如,如果您的资产文件夹中有自定义WebViewClient页面:

customErrorPage.html