我的一个活动中有一个WebView,当它加载一个网页时,该页面从Facebook收集了一些背景数据.
我所看到的是,每次打开和刷新应用程序时,应用程序中显示的页面都是相同的.
我已经尝试将WebView设置为不使用缓存并清除WebView的缓存和历史记录.
我也遵循了这里的建议:如何为WebView清空缓存?
但这一切都不起作用,有没有人有任何想法我可以克服这个问题,因为它是我的应用程序的重要部分.
mWebView.setWebChromeClient(new WebChromeClient()
{
public void onProgressChanged(WebView view, int progress)
{
if(progress >= 100)
{
mProgressBar.setVisibility(ProgressBar.INVISIBLE);
}
else
{
mProgressBar.setVisibility(ProgressBar.VISIBLE);
}
}
});
mWebView.setWebViewClient(new SignInFBWebViewClient(mUIHandler));
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.clearHistory();
mWebView.clearFormData();
mWebView.clearCache(true);
WebSettings webSettings = mWebView.getSettings();
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
Time time = new Time();
time.setToNow();
mWebView.loadUrl(mSocialProxy.getSignInURL()+"?time="+time.format("%Y%m%d%H%M%S"));
Run Code Online (Sandbox Code Playgroud)
所以我实现了第一个建议(尽管改变了代码是递归的)
private void clearApplicationCache()
{
File dir = getCacheDir();
if(dir!= null && dir.isDirectory())
{
try
{
ArrayList<File> stack = new ArrayList<File>();
// Initialise the list
File[] children = dir.listFiles();
for(File child:children)
{
stack.add(child);
} …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有一个非常简单的WebView,它显示"欢迎"对话框.
我通过语言发送服务器响应,如下所示:
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
noCacheHeaders.put("Accept-Language", Locale.getDefault().toString());
mWebView.loadUrl("www.fake.com", noCacheHeaders);
Run Code Online (Sandbox Code Playgroud)
这很好 - 但是,当我更改设备语言时,我希望WebView语言也能改变,我可以看到它的值"Accept-Language"调试时正在改变但是WebView中的内容没有改变.我已经找到了停止缓存的方法,我将在下面介绍.在语言更改后,它们都不会使网站加载不同.
为了确保服务器不是缓存问题,我确保在清除"应用程序数据"并重新启动后WebView内容发生更改.非常确凿的证据表明App正在存储WebView数据.
所以,我已经遵循了下面列出的许多不同的建议.其中没有一个实际上是在改变我的内容WebView:
从这里开始导致崩溃:
mWebView.clearCache(true);
mContext.deleteDatabase("webview.db");
mContext.deleteDatabase("webviewCache.db");
Run Code Online (Sandbox Code Playgroud)
这就是它自己(在loadURL之前,在它之后,onProgress = 100):
mWebView.clearCache(true);
Run Code Online (Sandbox Code Playgroud)
从这里开始:
mWebView.getSettings().setAppCacheMaxSize(0);
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
mWebView.getSettings().setAppCacheEnabled(false);
Run Code Online (Sandbox Code Playgroud)
所有都导致相同的行为.将设备语言从德语切换为英语时,我的WebView仍保留德语网站内容.
以下是所有代码:
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
noCacheHeaders.put("Accept-Language", Locale.getDefault().toString());
mWebView.getSettings().setAppCacheEnabled(false);
mWebView.clearCache(true);
mWebView.getSettings().setAppCacheMaxSize(0);
mWebView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
mProgress.setProgress(progress);
try {
getActivity().setProgress(progress);
if(progress == 100) { …Run Code Online (Sandbox Code Playgroud) 我有一个WebView控件,我想每次显示当前站点,但我认为WebView只显示该站点的缓存版本.我尝试了这里发现的一切,但似乎没有任何效果.我还试图从context.getCacheDir()中删除所有文件,但没有成功.我能做什么?
这是我在onCreate方法中的代码:
clearCache(this, 0);
setContentView(R.layout.webview);
deleteDatabase("webview.db");
deleteDatabase("webviewCache.db");
mWebView = (WebView)findViewById(R.id.webview);
mWebView.setWebViewClient(new CenterWebViewClient(this));
mWebView.setWebChromeClient(new CenterWebChromeClient(this));
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setAppCacheEnabled(false);
mWebView.getSettings().setAppCacheMaxSize(1);
mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
String url = "https://www.exacmple.com";
if (url != null) {
Map<String, String> noCacheHeaders = new HashMap<String, String>(2);
noCacheHeaders.put("Pragma", "no-cache");
noCacheHeaders.put("Cache-Control", "no-cache");
mWebView.loadUrl(url, noCacheHeaders);
}
Run Code Online (Sandbox Code Playgroud)
clearCache函数:
static int clearCacheFolder(final File dir, final int numDays) {
int deletedFiles = 0;
if (dir!= null && dir.isDirectory()) {
try {
for (File child:dir.listFiles()) {
//first delete subdirectories recursively
if (child.isDirectory()) {
deletedFiles += …Run Code Online (Sandbox Code Playgroud)