java - 如何离线使用缓存,否则使用网络
问题描述
我正在尝试创建一个显示 WebView 的应用程序。我希望它在没有网络时显示缓存版本。否则,如果有可用的网络,它应该从 URL 加载 WebView。
到目前为止一切顺利,除了它一直使用缓存版本,即使有可用的网络。所以我想问一下下面的代码是否有任何问题。看来我错过了什么。
我已经尝试了下面的代码,没有它。我发现以下内容:无论我尝试什么,该应用程序似乎总是使用“缓存”版本。在这一点上,我什至不确定它是否真的在使用缓存,因为当我清除应用数据(而不是缓存)时,我只能让它再次从 URL 加载网站。
Android 版本 6.0.1 API 级别 23
mWebView.getSettings().setAppCachePath(getApplicationContext().getCacheDir().getAbsolutePath() );
mWebView.getSettings().setAllowFileAccess( true );
mWebView.getSettings().setAppCacheEnabled( true );
mWebView.getSettings().setJavaScriptEnabled( true );
mWebView.getSettings().setCacheMode( WebSettings.LOAD_DEFAULT );
if ( !isNetworkAvailable() ) { // loading offline
mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
}
mWebView.loadUrl("https://path.to.my/website/index.html");
预期结果:当手机有网络时,我希望它从 URL 中获取网站。
实际结果:全新安装时,已从 url 获取网站。之后,它将只使用缓存的版本。(或者可能是存储在 App Data 中的版本。不确定它是如何工作的。)
更新:
我让它工作了,现在看起来像这样:(但不确定这是否是“最佳实践”的方法)
WebSettings webSettings = mWebView.getSettings();
webSettings.setAppCacheEnabled(true);
webSettings.setAllowFileAccess( true );
webSettings.setAppCachePath(getBaseContext().getCacheDir().getPath());
//webSettings.setJavaScriptEnabled( true );
if ( !isNetworkAvailable() ) { // loading offline
webSettings.setCacheMode( WebSettings.LOAD_CACHE_ONLY );
Toast.makeText(mContext, "DEBUG: No net",Toast.LENGTH_SHORT).show();
}
mWebView.loadUrl("https://path.to.my/website/index.html");