Android Webview离线时加载缓存

Posted

技术标签:

【中文标题】Android Webview离线时加载缓存【英文标题】:Loading Cache when Offline in Android Webview 【发布时间】:2011-04-16 19:29:48 【问题描述】:

我有一个从网站加载 url 的应用程序。现在我希望应用程序在离线时使用缓存。但我只是得到失败页面,上面写着我没有连接到网站。起初我将 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);

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

有没有一种简单的方法可以在离线且存在时加载缓存,如果不存在则显示失败消息。

【问题讨论】:

【参考方案1】:

好的。上面的代码很好。需要添加的权限是:

.互联网

.ACCESS_NETWORK_STATE

.ACCESS_WIFI_STATE

【讨论】:

【参考方案2】:

除了权限

.互联网

.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 或移动网络,应用程序会在首次启动时尝试获取网络信息时崩溃。

【讨论】:

以上是关于Android Webview离线时加载缓存的主要内容,如果未能解决你的问题,请参考以下文章

在Glide for Android中离线时加载已获取的图像

当设备在 react-native 中离线时,在 webview 中显示本地图像

即使在离线时如何缓存网页以在我的 android 应用程序中使用

Android WebView 未从缓存中加载第二页

H5 缓存机制浅析 移动端 Web 加载性能优化

在android中显示缓存的webview版本