title: Load Cache in Android Webview when not connected to internet else show the content from the server when connected to internet
body: <p>I have this app which uses webview to render the cached content when it is in offline mode and shows the webpage from the server when connected to internet...</p>
  
  <p>The code snippets are shown below. It crashes when i run the app.</p>
  
  <p>I am not able to figure it out what is going wrong. i have also set the uses-permission android:name="android.permission.INTERNET" in manifest file.    </p>
  
  <pre><code>package com.html5webappcache.android;
  
  import android.app.Activity;
  import android.net.ConnectivityManager;
  import android.os.Bundle;
  import android.view.Window;
  import android.webkit.WebChromeClient;
  import android.webkit.WebSettings;
  import android.webkit.WebStorage.QuotaUpdater;
  import android.webkit.WebView;
  import android.webkit.WebViewClient;
  import android.widget.ProgressBar;
  import android.widget.TextView;
  
  public class HTML5WebAppCacheTestActivity extends Activity {
      final Activity activity = this;
      private ConnectivityManager cm;
  
      /** Called when the activity is first created. */
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
  
          // Adds Progrss bar Support
          this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
          setContentView(R.layout.main );
  
          getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 
  
          WebView engine=(WebView)findViewById(R.id.web_engine);
          engine.getSettings().setJavaScriptEnabled(true);
          engine.getSettings().setBuiltInZoomControls(true);
          engine.getSettings().setLoadsImagesAutomatically(true);
          engine.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
          engine.setInitialScale(1);
  
          engine.setWebChromeClient(new WebChromeClient() {
                @Override
                   public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota,QuotaUpdater quotaUpdater)
                   {
                         quotaUpdater.updateQuota(spaceNeeded * 2);
                   }
                public void onProgressChanged(WebView view, int progress)
                {
                    activity.setTitle("Loading...");
                    activity.setProgress(progress * 100);
  
  
  
                    if(progress == 100)
                    { activity.setTitle(R.string.app_name);
  
                    }
                }
             });
          engine.getSettings().setDomStorageEnabled(true);
         // Set cache size to 8 mb by default. should be more than enough
          engine.getSettings().setAppCacheMaxSize(1024*1024*8);
          engine.getSettings().setAppCachePath("/data/data/com.html5webappcache.android/cache");
          engine.getSettings().setAllowFileAccess(true);
          engine.getSettings().setAppCacheEnabled(true);
          engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
  
           cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE);
           if(cm.getActiveNetworkInfo().isConnected())
           {
           engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
           engine.loadUrl("http://www.bifter.co.uk/");
           }
               else{
                  engine.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
                   engine.loadUrl("http://www.bifter.co.uk/");
               }
  
  
  
  
  
  
  
  
  
  
  
      }
  }
  </code></pre>