2017-05-18 30 views
0

我試圖添加一個進度條,該應用程序啓動後,在webview應用程序中顯示「正在加載...請稍候」,而不是一個白頁。我能夠做到這一點,但進度條加載而不停止。即使我從互聯網斷開連接後,它仍然沒有停止加載。我怎樣才能確保連接進度條停止和網站正常加載,而不是永久加載它告訴我「連接錯誤,再試一次。」Android webview progressbar不斷加載是否有互聯網

下面是我的代碼:

package com.ibra.ibrawebview; 
    import android.app.ProgressDialog; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.view.KeyEvent; 
    import android.webkit.WebView; 
    import android.webkit.WebViewClient; 
    import android.widget.Toast; 
    import android.support.v7.app.AlertDialog; 
    import android.content.DialogInterface; 

    public class MainActivity extends AppCompatActivity { 

     private WebView webView; 
     private ProgressDialog progressDialog; 



     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 


      webView = (WebView) findViewById(R.id.ibraWebView); 
      webView.getSettings().setJavaScriptEnabled(true); 
      progressDialog=new ProgressDialog(this); 
      progressDialog.setMessage("Loading...Please wait"); 
      progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); 
      progressDialog.show(); 

      webView.setWebViewClient(new WebViewClient() 
      { 
       @Override 
       public boolean shouldOverrideUrlLoading(WebView view, String url) { 
        view.loadUrl("http://www.google.com/"); 
        return true; 
       } 

       @Override 
       public void onPageFinished(WebView view, String url) { 
        super.onPageFinished(view, url); 
        if (progressDialog.isShowing()) { 
         progressDialog.dismiss(); 
        } 
       } 
      }); 

    //give error message if no connection 
      webView.setWebViewClient(new WebViewClient() { 
       public void onReceivedError(WebView webView, int errorCode, String description, String failingUrl) { 
        try { 
         webView.stopLoading(); 
        } catch (Exception e) { 
        } 

        if (webView.canGoBack()) { 
         webView.goBack(); 
        } 

        webView.loadUrl("about:blank"); 
        AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); 
        alertDialog.setTitle("Connection Problem"); 
        alertDialog.setMessage("Check your internet connection and try again."); 
        alertDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Try Again", new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int which) { 
          finish(); 
          startActivity(getIntent()); 
         } 
        }); 

        alertDialog.show(); 
        super.onReceivedError(webView, errorCode, description, failingUrl); 
       } 
      });//end of error message 

      //begin progress bar 


      //end of progress bar 


     } 
     //goback to previous page 
     @Override 
     public boolean onKeyDown(int keyCode, KeyEvent event) { 
      if (event.getAction()==KeyEvent.ACTION_DOWN){ 
       switch (keyCode){ 
        case KeyEvent.KEYCODE_BACK: 
         if (webView.canGoBack()){ 
          webView.goBack(); 
         } 
         else { 
          finish(); 
         } 
         return true; 
       } 
      } 
      return super.onKeyDown(keyCode, event); 
     } 



    } 

回答

0

,因爲你有setWebViewClient兩次。但只有一個將被考慮。所以你只需要編寫一個setWebViewClient並把所有的重寫方法,如pageFinished,onRecievedError放在裏面。

0
if (progressDialog.isShowing()) { 
    progressDialog.dismiss(); 
} 

使用此同時顯示無連接的錯誤一樣,所以在Android中移除進度條。

1

試試這個

ProgressBar progressBar; 
progressBar = (ProgressBar) findViewById(R.id.progressbar); 
progressBar.setMax(100); 
progressBar.setProgress(1); 

    webView.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      progressBar.setProgress(progress); 
     } 
    }); 

    webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      super.onPageStarted(view, url, favicon); 
      progressBar.setVisibility(View.VISIBLE); 


     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      view.loadUrl(url); 
      return true; 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      progressDialog.hide(); 
      progressBar.setVisibility(View.GONE); 
     } 
    }); 
+0

這就是你應該怎麼做的@Wannabe JavaGeek –

1

創建方法checkConnection(),它會告訴你,如果互聯網連接可用。這是你如何做到這一點:

private void checkConnection() { 
    ConnectivityManager cm = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    isConnected = false; 
    if (activeNetwork != null && activeNetwork.isConnected()) { 
     isConnected = true; 



    } else { 
     final AlertDialog.Builder builder = new AlertDialog.Builder(FeedbackActivity.this); 
     builder.setTitle("Connection failed"); 
     builder.setMessage("The application without the internet connection may not work. Please check your internet connection."); 
     builder.setIcon(android.R.drawable.ic_dialog_alert); 
     builder.setCancelable(false); 
     builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { 

      public void onClick(DialogInterface dialog, int which) { 

       checkConnection(); 
      } 
     }); 
     builder.show(); 

    } 
}