2015-06-21 163 views
0

我实际上是新的编程在Java中,但我一直在我的问题几个解决方案在这里,但没有找到一个适合我的情况,我似乎无法正确地取下代码。如何webview离线和在线加载网站内容在Android

我想要一个WebView,当手机在线时打开一个在线页面(例如谷歌),当手机处于离线状态时打开一个本地html页面。

虽然我希望手机在联机时覆盖本地页面,以便离线本地页面始终更新到最后一次手机连接到互联网。

任何想法如何做到这一点?一些简单的指向正确的方向可能会有所帮助。

非常感谢

我的源代码

 WebView engine=(WebView)findViewById(R.id.webView); 
     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(1); 
     engine.getSettings().setAllowFileAccess(true); 
     engine.getSettings().setAppCacheEnabled(true); 
     engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 
     Map<String, String> noCacheHeaders = new HashMap<String, String>(2); 
     noCacheHeaders.put("Pragma", "no-cache"); 
     noCacheHeaders.put("Cache-Control", "no-cache"); 
     // engine.loadUrl("http://www.stackhand.com", noCacheHeaders); 

     cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE); 
     if(cm.getActiveNetworkInfo().isConnected()) 
     { 
     engine.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); 

     } 
      else{ 
       engine.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 

      } 



     engine.loadUrl("http://www.stackhand.com", noCacheHeaders); 

使用此功能的在线检查网络和离线

private boolean isNetworkAvailable() { 
     ConnectivityManager connectivityManager = (ConnectivityManager)  
     getSystemService(CONNECTIVITY_SERVICE); 
     NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); 
     return activeNetworkInfo != null && activeNetworkInfo.isConnected(); 
    } 

回答

1

首先创建HTML自己的网页,你要离线期间展示。并将其放入资产文件夹中,我们称之为mypage.html然后用onReceivedError: 添加以下代码,

mWebView.setWebViewClient(new WebViewClient() { 
public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    mWebView.loadUrl("file:///android_asset/mypage.html"); 

}