我的Android HTML应用程序在关闭时正在丢失本地存储中存储的值。还有人看到这个问题吗?

我的Android HTML应用程序在关闭时正在丢失本地存储中存储的值。还有人看到这个问题吗?,android,webview,local-storage,Android,Webview,Local Storage,我有一个原生的Android 2.1应用程序,它承载一个web视图。我加载了一个包含使用LocalStorage功能的javascript的站点。当应用程序运行时,localStorage工作正常。当一些用户退出应用程序并重新启动时,所有值都将消失。我在我的Motrola Droid或Sprint EVO中没有看到这个问题,但有一份报告显示,该领域的用户存在这个问题 有人知道我错过了什么吗?我正在将下面的标志设置为true settings.setDomStorageEnabled(true);

我有一个原生的Android 2.1应用程序,它承载一个web视图。我加载了一个包含使用LocalStorage功能的javascript的站点。当应用程序运行时,localStorage工作正常。当一些用户退出应用程序并重新启动时,所有值都将消失。我在我的Motrola Droid或Sprint EVO中没有看到这个问题,但有一份报告显示,该领域的用户存在这个问题

有人知道我错过了什么吗?我正在将下面的标志设置为true

settings.setDomStorageEnabled(true);

这是有效的

要使本地存储在Android中为您自己的WebView工作,您需要确保WebView使用的是正确的文件,并且本地存储是这样启用的:

String packageName = "com.dongshengcn.android";
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/"+packageName+"/databases");
settings.setDomStorageEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
    webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
}

其中“com.dongshencn.android”应替换为您自己的android应用程序包名称。

只需这两行:

this.getSettings().setDomStorageEnabled(true); //enable to use "window.localStorage['my']='hello1'", in webview js on >= android 2.0
this.getSettings().setDatabasePath("/data/data/"+this.context.getPackageName()+"/databases/"); //if no set or wrong path, variables disappear on killed

请完成之前的回答,因为这些回答无法解决我的问题

我正在使用安卓4.1.1。我的应用程序在Webview中使用本地存储,我遇到了与原始问题相同的问题:本地存储工作正常,直到我杀死应用程序。在本例中,数据丢失

通过从以前的回答中,特别是从@diyism中,我得到了启发,我能够用以下方法解决我的问题:

String databasePath = this.getApplicationContext().getDir("databases", Context.MODE_PRIVATE).getPath();
settingsMenu.setDatabasePath(databasePath);
事实上,正如setDatabasePath()文档中所述:
要正确运行,必须使用应用程序可以写入的路径调用此方法

API级别19中不推荐使用setDatabasePath()方法。我建议您使用如下存储区域设置:

String packageName = "com.dongshengcn.android";
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDatabaseEnabled(true);
settings.setDatabasePath("/data/data/"+packageName+"/databases");
settings.setDomStorageEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
    webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
}
webView.getSettings().setDomStorageEnabled(true);
webView.getSettings().setDatabaseEnabled(true);
if(Build.VERSION.SDK_INT
您知道哪些设备的应用程序存在此问题吗?我不知道这个功能有什么问题,至少在安卓2.x设备上是这样。看起来有几个摩托罗拉机器人出现了故障。我有一个来自工厂的w/2.1,它似乎工作得很好。我发现了。在我将其设置为我的应用程序的所有数据库的默认路径:/data/data/package name/databases/后,它就会工作。我想知道为什么android会自动为我们做到这一点(@Dongshengcn也许你可以发布一个完整的解决方案摘要,并接受它作为一个答案,因为将来遇到这个问题的人都知道它已经解决了?这可能是一个非常常见的问题(4个问题的投票),所以知道有一个解决方案很好。硬编码路径不是一个合适的解决方案。使用这个。getApplicationContext().getDir(改为“databases”,Context.MODE_PRIVATE).getPath();因为如果/data/data/path随某个新的API版本更改,它仍然可以工作。