繁体   English   中英

如何使用Cache离线,否则使用网络

[英]How to use Cache offline, else use network

我正在尝试创建一个显示WebView的应用程序。 我希望它在没有网络时显示缓存版本。 否则,如果有可用的网络,它应该从URL加载WebView。

到目前为止一切都那么好,除非它一直使用缓存版本,即使有网络可用。 所以我想问一下下面的代码是否有问题。 似乎我错过了一些东西。

我已尝试使用下面的代码,没有它。 我发现了以下内容:无论我尝试什么,似乎该应用程序始终使用“缓存”版本。 此时我甚至不确定它是否真正使用了缓存,因为当我清除App Data(而不是缓存)时,我只能再次从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获取网站。

实际结果:安装完成后,网站已从网址中获取。 然后,它将只使用缓存版本。 (或者可能是存储在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");

问题出在LOAD_DEFAULT 官方文件

LOAD_DEFAULT

默认缓存使用模式。 如果导航类型未强加任何特定行为,请在缓存资源可用且未过期时使用缓存资源,否则从网络加载资源。

当您希望从网络加载时,它将从缓存加载。

有网络时试试这个:

mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

当没有网络时,使用:

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

有关详细信息,请参阅此答案

   if (!isNetworkAvailable()) { // loading offline
        mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
   } else {
     mWebView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM