2017-04-05 43 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); 
} 

這樣一來,如果沒有網絡連接它甚至不會嘗試撥打電話。