Mi aplicación Android de HTML está perdiendo valores almacenados en localStorage cuando se cierra. ¿Alguien más ve este problema?
Tengo una aplicación nativa de Android 2.1 que hospeda una vista web. Cargo un sitio que contiene javascript que utiliza la función LocalStorage. Cuando se ejecuta la aplicación localStorage funciona correctamente. Cuando algunos usuarios salen de la aplicación y la reinician, todos los valores se han ido. No veo este problema en mi Motrola Droid o Sprint EVO, pero hay un informe de los usuarios en el campo con este problema.
¿Alguien sabe lo que me falta? Estoy estableciendo el siguiente indicador a true.
- "Hola, WebView" tutorial abre la dirección solicitada en el navegador de Android y no en mi webview
- DownloadListener.onDownloadStart () nunca llamado
- ¿Hay una manera de pre-cache de una página web para ver con un Android WebView?
- Mostrar la versión en caché de webview en android
- No se puede seleccionar la opción en la vista web de android
settings.setDomStorageEnabled(true);
- Contenido de la web de android no seleccionable
- Android: ¿Es posible y cómo cambiar el tamaño de letra de una página HTML que se muestra en un WebView?
- Vista web de Android con geolocalización de HTML 5
- Alerta de seguridad de Android WebView SSL
- De ancho: 100% en CSS no bien renderizado en Android 4.4
- Cómo recuperar el contenido HTML de WebView (como una cadena)
- Error en Webview con targetSdkVersion 24
- HTML5 <audio> etiqueta que no funciona en Android Webview
Para que el almacenamiento local funcione para su propio WebView en Android, debe asegurarse de que WebView utiliza el archivo correcto y el almacenamiento local está habilitado de la siguiente manera:
String packageName = "com.dongshengcn.android"; WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setDatabaseEnabled(true); settings.setDatabasePath("/data/data/"+packageName+"/databases"); settings.setDomStorageEnabled(true);
Donde "com.dongshengcn.android" debe ser reemplazado con su propio nombre androide pacakge app.
Sólo para completar las respuestas anteriores que no permiten resolver el problema en mi caso.
Estoy trabajando con Android 4.1.1. Mi aplicación utiliza el almacenamiento local dentro de una vista Web y estaba recibiendo el mismo problema que en la pregunta original: el almacenamiento local funciona bien hasta matar la aplicación. En este caso, los datos se perdieron.
Al inspirarme de respuestas anteriores, y especialmente de @diyism, pude resolver mi problema con esto:
String databasePath = this.getApplicationContext().getDir("databases", Context.MODE_PRIVATE).getPath(); settingsMenu.setDatabasePath(databasePath);
De hecho, como se escribe en la documentación setDatabasePath (): to function correctly, this method must be called with a path to which the application can write
.
El método setDatabasePath () fue obsoleto en el nivel 19 de API. Le aconsejo que utilice el entorno de almacenamiento como este:
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/"); }
Sólo necesitan estas dos líneas:
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/");
esto funciona