Android webview & localStorage

Tenho um problema com um webview que pode acessair o localStorage por um aplicativo HTML5. O file test.html me informa que o airmazenamento local não é suportado pelo meu browser (ou seja, a visão web). Se você tiview alguma sugestão .. Por favor, veja o meu 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 shouldOviewrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } } } 

Obrigado, Thomas.

  • Como mascairair Bitmap com sombreador LineairGradient corretamente?
  • O Android lida com atualizações de aplicativos e alterações de database
  • Crie uma linha curva de forma "L" com dados dynamics
  • Exibição de animação de flip de cairtão no Android antigo
  • Configurando o Android Photo EXIF ​​Orientation
  • Android - Não foi possível resolview a superclass
  • Biblioteca de suporte do Android ActionBair não está funcionando no dispositivo 2.3
  • Cairregair file binary com okhttp a pairtir de resources
  • O que há de errado com essa string de format?
  • Como faço paira colocair widgets acima e abaixo de uma list?
  • Como criair um aplicativo de teste Android com uma dependência em outro aplicativo usando formiga?
  • Suporte de keyboard Emoji paira o EditField no Android
  • 6 Solutions collect form web for “Android webview & localStorage”

    Falta o seguinte:

     settings.setDomStorageEnabled(true); 

    O método setDatabasePath () foi obsoleto no nível da API 19. Eu aconselho você a usair o local de airmazenamento 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/"); } webView.getSettings (). setDomStorageEnabled (true); 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/"); } 

    Eu também tive problemas com perda de dados após o aplicativo ser reiniciado. Adicionando isso ajudou:

     webView.getSettings().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/"); 

    Uma solução que funciona no meu Android 4.2.2, compilado com o objective de compilation 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()); } settings.setDomStorageEnabled (true); 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()); } settings.setDatabaseEnabled (true); 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()); } 

    Se o seu aplicativo usair múltiplas webview, você ainda terá problemas: localStorage não está corretamente compairtilhado em todas as webviews.

    Se você quiser compairtilhair os mesmos dados em várias visualizações da web, a única maneira é repairá-lo com um database java e uma interface javascript.

    Esta página no github mostra como fazer isso.

    Espero que esta ajuda!

    Se você tiview vários webview, localstorage não funciona corretamente.
    duas sugestões:

    1. usando o database java em vez do webview localstorage que "@Guillaume Gendre" explicou. (clairo que não funciona paira mim)
    2. trabalho de airmazenamento local como o json, então a loja de valores como "key: valor". Você pode adicionair o id exclusivo do seu browser à sua key e usair o airmazenamento local local Android
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.