20

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

有谁知道我错过了什么?我将以下标志设置为 true。

settings.setDomStorageEnabled(true);
4

5 回答 5

18

要使本地存储在 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);

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

于 2011-05-17T14:00:25.753 回答
11

只是为了完成之前的回复,这些回复无法解决我的问题。

我正在使用 Android 4.1.1。我的应用程序在 Webview 中使用本地存储,我遇到了与原始问题相同的问题:本地存储工作正常,直到我终止应用程序。在这种情况下,数据丢失了。

通过从以前的回复中启发我,尤其是来自@diyism,我能够通过以下方式解决我的问题:

String databasePath = this.getApplicationContext().getDir("databases", Context.MODE_PRIVATE).getPath();
settingsMenu.setDatabasePath(databasePath);

事实上,正如 setDatabasePath() 文档中所写:to function correctly, this method must be called with a path to which the application can write.

于 2013-10-28T09:24:21.100 回答
7

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

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/");
}
于 2014-04-02T06:31:27.227 回答
4

只需要这两行:

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
于 2011-10-19T06:49:04.557 回答
3
// Confimed on android 2.1 emulator

// enable javascript localStorage


WebSettings webSettings = myWebView.getSettings();

webSettings.setDomStorageEnabled(true);   // localStorage

// eg if your package

// package www.myapp.whatever;

// eg webSettings.setDatabasePath("/data/data/www.myapp.whatever/databases/");

webSettings.setDatabasePath("/data/data/packagename/databases/");

这行得通

于 2011-05-02T10:47:18.470 回答