我的Android HTML应用程序在关闭时会丢失存储在localStorage中的值.其他人都看到这个问题?

Kev*_*vin 20 android webview local-storage

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

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

settings.setDomStorageEnabled(true);
Run Code Online (Sandbox Code Playgroud)

don*_*gcn 17

要使本地存储在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);
Run Code Online (Sandbox Code Playgroud)

其中"com.dongshengcn.android"应该替换为您自己的Android应用程序pacakge名称.

  • 硬编码路径不是一个合适的解决方案.使用this.getApplicationContext().getDir("databases",Context.MODE_PRIVATE).getPath(); 相反,如果/ data/data/<package_name>路径随着一些新的API版本而改变,它仍然可以工作. (5认同)

Lis*_*ien 11

只是为了完成以前的回复,这些回复不允许在我的案例中解决问题.

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

通过以前的回应激励我,尤其是@diyism,我能够解决我的问题:

String databasePath = this.getApplicationContext().getDir("databases", Context.MODE_PRIVATE).getPath();
settingsMenu.setDatabasePath(databasePath);
Run Code Online (Sandbox Code Playgroud)

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


mr.*_*fox 7

在API级别19中不推荐使用setDatabasePath()方法.我建议您使用这样的存储区域设置:

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/");
}
Run Code Online (Sandbox Code Playgroud)


ozm*_*ike 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/");
Run Code Online (Sandbox Code Playgroud)

这有效