2017-04-05 54 views
0

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

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"); 

回答

0
  1. 一般来讲,你想拥有超级调用自定义代码之前执行,所以你可能想从那里开始。 如果您不关心超级通话,您可能需要删除它。

  2. 您可能想要在onPageFinished中放置一个断点。我怀疑这是您在没有互联网连接时收到的电话。

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

我建议你阅读本接受的答案:Detect whether there is an Internet connection available on Android。也有数百个其他的答案在SO如何在Android中检查网络连接,如果你不喜欢这个答案。

那么接下来你的电话会是这个样子:

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

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