在Android Webview中离线加载caching

我有一个应用程序从网站加载url。 现在我希望应用程序在脱机时使用caching。 但我只是得到说,我没有连接到网站的失败页面。 起初,我将Cachemode设置为Load_Normal,但这没有帮助。 接下来,我使用ConnectivityManager尝试了一个“愚蠢”的方法:

cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE); if(cm.getActiveNetworkInfo().isConnected()){ mfnWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); mfnWebView.loadUrl(url); } else{ mfnWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); mfnWebView.loadUrl(url); } 

但这只会导致应用程序崩溃。

有一个简单的方法来加载caching时,脱机和现有,只是如果不存在显示失败的消息。

  • Android 4.2.1,WebView和JavaScript界面​​中断
  • Android webview“未捕获的SyntaxError:意外的令牌非法”
  • 在Android上加载一个div到webview
  • 为什么不build议使用WebView的LayoutAlgorithm.SINGLE_COLUMN?
  • 在Android中拦截WebView请求的最佳方法
  • Android WebView是否需要打开外部URL的权限?
  • Android的JavascriptInterface安全?
  • 我的Android HTML应用程序在关闭时会丢失存储在localStorage中的值。 其他人都看到这个问题?
  • 好。 上面的代码很好。 需要添加的权限是:

    。互联网

    .ACCESS_NETWORK_STATE

    .ACCESS_WIFI_STATE

    除了权限

    。互联网

    .ACCESS_NETWORK_STATE

    .ACCESS_WIFI_STATE

    在另一个答案中提到,我还需要对代码进行以下更改:

     if(cm != null && cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isConnected()){ webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT); } else{ webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); } 

    否则,如果我没有连接到WiFi或移动networking,则在首次启动时尝试获取networking信息时,应用程序会崩溃。