2010-06-02 6 views
19

Ich habe eine native Android 2.1-Anwendung, die eine Webansicht hostet. Ich lade eine Website auf, die JavaScript enthält, das die LocalStorage-Funktion verwendet. Wenn die Anwendung läuft, funktioniert localStorage einwandfrei. Wenn einige Benutzer die Anwendung beenden und neu starten, sind alle Werte verloren. Ich sehe dieses Problem nicht in meinem Motrola Droid oder Sprint EVO, aber es gibt einen Bericht von Benutzern in diesem Bereich.Meine Android-HTML-Anwendung verliert Werte, die in localStorage gespeichert sind, wenn sie heruntergefahren wird. Hat sonst noch jemand dieses Problem?

Weiß jemand, was ich vermisse? Ich setze das folgende Flag auf wahr.

settings.setDomStorageEnabled(true); 
+0

Wissen Sie, welche Geräte dieses Problem mit Ihrer App zu haben? Mir ist kein Problem mit dieser Funktion bekannt, zumindest auf Android 2.x-Geräten. – CommonsWare

+0

Es sieht aus wie ein paar Motorola Droiden versagen. Ich habe eine, die mit 2.1 aus der Fabrik kam und es scheint gut zu funktionieren. – Kevin

+0

http://stackoverflow.com/questions/4157184/android-making-webview-domstorage-persistant-after-app-closed – rdmueller

Antwort

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

das funktioniert

16

Um die lokale Speicher Arbeit für Ihre eigene WebView in Android zu machen, müssen Sie die WebView stellen Sie sicher, die richtige Datei verwendet, und der lokale Speicher wird wie folgt aktiviert :

String packageName = "com.dongshengcn.android"; 
WebSettings settings = webView.getSettings(); 
settings.setJavaScriptEnabled(true); 
settings.setDatabaseEnabled(true); 
settings.setDatabasePath("/data/data/"+packageName+"/databases"); 
settings.setDomStorageEnabled(true); 

Wo "com.dongshengcn.android" mit Ihren eigenen android App thepacakge Namen ersetzt werden soll.

+5

Hardcoding der Pfad ist keine richtige Lösung .getApplicationContext(). getDir ("Datenbanken", Context.MODE_PRIVATE).getPfad(); Stattdessen würde es immer noch funktionieren, wenn sich der Pfad/data/data/ mit einer neuen API-Version ändert. – MrMaffen

4

brauchen nur diese beiden Zeilen:

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 
10

Nur für eine vollständige die bisherigen Antworten, die nicht das Problem in meinem Fall lösen ließen.

Ich arbeite mit Android 4.1.1. Meine App verwendet lokalen Speicher in einem Webview und ich erhalte das gleiche Problem wie in der ursprünglichen Frage: Der lokale Speicher funktioniert einwandfrei, bis ich die App beendet habe. In diesem Fall gingen die Daten verloren.

Von mir aus früheren Antworten inspirierend und vor allem von @diyism, konnte ich mein Problem mit diesem lösen:

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

In der Tat, wie in der setDatabasePath() Dokumentation geschrieben: to function correctly, this method must be called with a path to which the application can write.

6

setDatabasePath() -Methode wurde in API-Ebene veraltet 19. Ich rate Ihnen, Speicher locale wie folgt zu verwenden:

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