Android webview&localStorage
我有一个webview可以通过HTML5
应用程序访问localStorage的问题。 test.html文件告诉我本地存储不受我的浏览器支持(即webview
)。 如果您有任何build议..
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; } } }
以下是失踪:
settings.setDomStorageEnabled(true);
setDatabasePath()方法已在API级别19中弃用。我build议您使用如下所示的存储区域设置:
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().setDatabasePath("/data/data/" + webView.getContext().getPackageName() + "/databases/");
在我的Android 4.2.2上工作的解决scheme,使用构build目标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()); }
如果您的应用使用多个Web视图,您仍然会遇到麻烦:localStorage在所有网页浏览中都无法正确共享。
如果您想在多个网页浏览中共享相同的数据,唯一的方法就是使用java数据库和JavaScript界面进行修复。
github上的这个页面展示了如何做到这一点。
希望这个帮助!
如果你有多个webview,localstorage不能正常工作。
两点build议:
- 使用java数据库,而不是webview localstorage,“@Guillaume Gendre”解释(当然这不适用于我)
- 本地存储工作,如JSON,所以值存储为“键:值”。你可以添加您的浏览器的唯一ID到它的关键和使用正常的android本地存储