簡體   English   中英

我的Android HTML應用程序在關閉時會丟失存儲在localStorage中的值。 其他人都看到這個問題?

[英]My Android HTML application is losing values stored in localStorage when it shuts down. Anyone else see this issue?

我有一個托管Web視圖的原生Android 2.1應用程序。 我加載了一個包含使用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);

其中“com.dongshengcn.android”應該替換為您自己的Android應用程序pacakge名稱。

只是為了完成以前的回復,這些回復不允許在我的案例中解決問題。

我正在使用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

在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/");
}

只需要這兩行:

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
// 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/");

這很有效

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM