有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

未连接到服务器时,从Android webview中的应用缓存加载javascript

我有一个使用webview的Android应用程序。有一个java后端服务器提供所有前端文件,并通过ApacheTomcat构建缓存清单

我的问题是,当服务器未连接,但设备已连接到internet时,我不确定如何从应用程序缓存加载webview

如果我进入应用程序代码,我可以强制它使用缓存

webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);

所以我知道我的文件被适当地缓存了。我还尝试了其他堆栈溢出问题的解决方案,这些问题让我检查网络状态,并根据网络状态设置缓存模式,如下所示:

     cm = (ConnectivityManager) this.getSystemService(Activity.CONNECTIVITY_SERVICE);
     if(cm.getActiveNetworkInfo().isConnected()) ....

但是,如果设备处于联机状态,但我的服务器已关闭,则此操作不起作用。它仍然说网络在这种情况下是正常的,不会从缓存加载

理想的解决方案是,当前端webview试图通过网络访问资源而资源不可用时,它只是从缓存加载,这正是它在普通浏览器中的工作方式。但我可以接受解决办法,比如让应用程序检测到我的特定服务器的网络连接,并相应地更改缓存模式

有人知道解决这个问题的最佳方法吗?谢谢


共 (1) 个答案

  1. # 1 楼答案

    所以问题似乎是android根本不使用HTML5应用程序缓存,除非你告诉它,这真的让我想不起来了。我使用以下代码解决了这个问题:

    final WebSettings webviewSettings = webView.getSettings();
    final String appCachePath = this.getCacheDir().getAbsolutePath();
    webviewSettings.setDomStorageEnabled(true);
    webviewSettings.setAppCachePath(appCachePath);
    webviewSettings.setAllowFileAccess(true);
    webviewSettings.setAppCacheEnabled(true);
    webviewSettings.setCacheMode(WebSettings.LOAD_DEFAULT);
    

    然后它表现出了我所期望的应用缓存的表现。也就是说,如果不能通过网络加载资源,它将从缓存加载资源,如缓存清单中的缓存部分所指定