2010-06-02 11 views
19

Ho un'applicazione Android 2.1 nativa che ospita una visualizzazione Web. Carico un sito che contiene javascript che utilizza la funzione LocalStorage. Quando l'applicazione è in esecuzione, localStorage funziona correttamente. Quando alcuni utenti escono dall'applicazione e la riavviano, tutti i valori sono scomparsi. Non vedo questo problema nel mio Motrola Droid o Sprint EVO, ma c'è un rapporto degli utenti sul campo con questo problema.La mia applicazione HTML Android sta perdendo i valori memorizzati in localStorage quando si spegne. Qualcun altro vede questo problema?

Qualcuno sa cosa mi manca? Sto impostando il seguente flag su true.

settings.setDomStorageEnabled(true); 
+0

Sai quali dispositivi stanno avendo questo problema con la tua applicazione? Non sono a conoscenza di un problema con questa funzione, almeno sui dispositivi Android 2.x. – CommonsWare

+0

Sembra che un paio di droidi Motorola stiano fallendo. Ho uno che è venuto w/2.1 dalla fabbrica e sembra funzionare bene. – Kevin

+0

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

risposta

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

questo funziona

16

Per rendere il lavoro di archiviazione locale per il proprio WebView in Android, è necessario assicurarsi che il WebView utilizza il file corretto, e la memoria locale è abilitato come questo :

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

Dove "com.dongshengcn.android" dovrebbe essere sostituito con il proprio App Android nome pacakge.

+5

Hardcoding il percorso non è una soluzione adeguata. .getApplicationContext(). getDir ("databases", Context.MODE_PRIVATE).getPath(); invece come funzionerebbe ancora se il percorso/data/data/ cambia con qualche nuova versione dell'API. – MrMaffen

4

bisogno solo queste due righe:

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

Solo per completo le risposte precedenti, che non ha permesso di risolvere il problema nel mio caso.

Sto lavorando con Android 4.1.1. La mia app utilizza la memoria locale all'interno di una Webview e ho riscontrato lo stesso problema della domanda originale: la memoria locale funziona bene fino a quando non uccido l'app. In questo caso, i dati sono stati persi.

Con avermi ispirato dalle risposte precedenti, e in particolare da @diyism, sono stato in grado di risolvere il mio problema con questo:

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

Infatti, come riportato nella documentazione setDatabasePath(): to function correctly, this method must be called with a path to which the application can write.

6

setDatabasePath() il metodo è stata sconsigliata a livello di API 19. Vi consiglio di utilizzare impostazioni locali di stoccaggio in questo modo:

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