这与我之前提到的“How can I clear my app's localStorage on my Android emulator each time I install it?”问题有关。
它还建立在“How can I clear the Android app cache?”和“How to programatically clear application data?”的基础上。
上述问题均未提供适用于Android PhoneGap / Cordova应用程序的直接答案。 This blog post Igor Hrupin涵盖了 原生 Android应用环境中的情况,因此这个问题扩展到了Cordova。
我会自己发一个答案,但我是一个完整的Java菜鸟,所以请编辑改进。
答案 0 :(得分:15)
刚刚看到这一个。它可以用一条线完成。我不确定这是否是您想要的,但它符合我的目的,即在启动时清除缓存
https://coderwall.com/p/aj79eg
super.clearCache(); // just add This Line
super.loadUrl("file:///android_asset/www/index.html");
答案 1 :(得分:5)
我无法强制Android重新加载新版本:
super.loadUrl("file:///android_asset/www/index.html");
在调用之间,所以我首先借用了你的代码,该代码运行得很好,除了我的应用程序写的所有数据都被删除了。
快速简单的解决方法是更改上述文件的网址:
super.loadUrl("file:///android_asset/www/index.html?1");
并改变背后的数字?每次加载。最后我补充道:
import java.util.Random;
public class MainActivity extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
Random generator = new Random();
int r = generator.nextInt();
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html?" + r);
}
}
现在,每次重建应用程序时,它都会刷新html文件的缓存版本。
我非常想知道如何从app内部强制loadUrl进行刷新,或强制重新加载。
答案 2 :(得分:2)
这个答案借this blog post Igor Hrupin向these lines借了很多代码。
对于普通的PhoneGap应用,您的Project > src > [com/org/whatever].[YourNameSpace].[ActivityNameHere] > [ActivityNameHere].java
应该看起来大致相同。
package [com/org/whatever].[YourNameSpace].[ActivityNameHere];
import org.apache.cordova.*;
import android.os.Bundle;
public class [ActivityNameHere] extends DroidGap {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
}
}
我们所做的是将其更改为以下代码。 为了清晰起见,未注明的行被注释掉了,但在实施时应该取消注释。
请务必使用您自己的值替换[com/org/whatever]
,[YourNameSpace]
和 多个 [ActivityNameHere]
占位符。
// package [com/org/whatever].[YourNameSpace].[ActivityNameHere];
// import org.apache.cordova.DroidGap;
// import android.os.Bundle;
import java.io.File;
import android.util.Log;
// public class [ActivityNameHere] extends DroidGap {
private static [ActivityNameHere] instance;
// @Override
// public void onCreate(Bundle savedInstanceState) {
instance = this;
[ActivityNameHere].getInstance().clearApplicationData();
// super.onCreate(savedInstanceState);
// super.loadUrl("file:///android_asset/www/index.html");
// }
public static [ActivityNameHere] getInstance() {
return instance;
}
public void clearApplicationData() {
File cache = getCacheDir();
File appDir = new File(cache.getParent());
if (appDir.exists()) {
String[] children = appDir.list();
for (String s : children) {
if (!s.equals("lib")) {
deleteDir(new File(appDir, s));
Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
}
}
}
}
public static boolean deleteDir(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return dir.delete();
}
// }
正如我的问题所述,我没有Java技能,所以我从我能找到的东西中将它一起攻击并且似乎有效。请相应地进行编辑 - 我认为这是应该可供人们有效复制和使用的内容。在他们需要时粘贴,因为Android上的PhoneGap的全部意义是从Java中抽象开发人员(为了记录,我将在我的当前项目完成后开始学习。)
代码似乎有效,至少在我的情况下。添加 -
会很高兴(1)能够沿着{{3}}从JS调用此函数。
和
(2)选择仅在第一次运行应用时清除缓存 ,这样您就可以模拟“强制关闭”的应用。