Vista web de Android y localStorage
Tengo un problema con una webview que puede tener acceso a la localStorage mediante una aplicación HTML5. El archivo test.html me informa que el almacenamiento local no es compatible con mi navegador (por ejemplo, la webview). Si tiene alguna sugerencia .. Eche un vistazo a mi código:
package com.test.HelloWebView; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebStorage; import android.webkit.WebView; import android.webkit.WebViewClient; public class HelloWebView extends Activity { WebView webview; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.setWebViewClient(new HelloWebViewClient()); webview.loadUrl("file:///android_asset/test.html"); WebSettings settings = webview.getSettings(); settings.setJavaScriptEnabled(true); settings.setDatabaseEnabled(true); String databasePath = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath(); settings.setDatabasePath(databasePath); webview.setWebChromeClient(new WebChromeClient() { public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota, long estimatedSize, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) { quotaUpdater.updateQuota(5 * 1024 * 1024); } }); } public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { webview.goBack(); return true; } return super.onKeyDown(keyCode, event); } private class HelloWebViewClient extends WebViewClient { public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } }
Gracias, Thomas.
- Alcanzar el límite de ancho de banda para ver archivos pdf en WebView a través de Google Docs
- Recuerda la contraseña emergente en el problema de la vista web de Android
- Vista web de Android con GSAP: intenta eliminar la referencia local que no sea JNI,
- Android WebView getElementById ('math') no funciona dinámicamente
- Inicio y fin de solicitudes de registro HTTP desde WebView incorporado de Android
- ¿Cómo cambiar el tamaño del contenido de una webview en android?
- Android Webview: No se puede llamar a determinedVisibility () - nunca vio una conexión para el pid
- Cómo activar la cámara frontal en la vista web de android
- Compruebe la conexión a Internet en Android WebView (Córdoba)
- Renderizar archivos epub en android
- OnPageFinished () nunca llamado (webview)!
- Cómo habilitar el zoom webview detrás del diseño lineal en android?
- 'Webpage not available' con WebView.loadData () SOLAMENTE en el emulador
Faltaba lo siguiente:
settings.setDomStorageEnabled(true);
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/"); }
También he tenido problemas con los datos que se pierden después de reiniciar la aplicación. Añadir esto ayudó:
webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
Una solución que funciona en mi Android 4.2.2, compilado con la meta de compilación Android 4.4W:
WebSettings settings = webView.getSettings(); settings.setDomStorageEnabled(true); settings.setDatabaseEnabled(true); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { File databasePath = getDatabasePath("yourDbName"); settings.setDatabasePath(databasePath.getPath()); }
Si tu aplicación utiliza varias vistas web, aún tendrás problemas: localStorage no se comparte correctamente en todas las webviews.
Si desea compartir los mismos datos en varias vistas web, la única manera es repararla con una base de datos java y una interfaz javascript.
Esta página en github muestra cómo hacerlo.
¡espero que esto ayude!
Si tiene varias vistas web, localstorage no funciona correctamente.
Dos sugerencia:
- Utilizando la base de datos de java en lugar de webview localstorage que "@Guillaume Gendre" explicado (por supuesto, no funciona para mí)
- El trabajo de almacenamiento local como json, por lo que los valores de almacenamiento como "clave: valor". Usted puede agregar su identificador único navegador a su clave y el uso normal de android localstorage
- Sistema de archivos de sólo lectura en Android
- Utilizar el constructor URI en Android o crear URL con variables