在Android的Webview中使用本地存储

5
我正在进行Android代码实验:我想要使用HTML 5本地存储来存储一个值。为了练习,我使用了一个非常简单的页面:http://www.w3schools.com/html5/tryit.asp?filename=tryhtml5_webstorage_local_clickcount
我的清单允许我访问互联网,并且最低SDK为7。
以下是我的Java代码:
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    webview = (WebView) findViewById(R.id.webview);
    WebView webView = (WebView) findViewById(R.id.webview);
    webView.addJavascriptInterface(new JavaScriptInterface(this), "Android");
    WebSettings webSettings = webview.getSettings();
    webSettings.setJavaScriptEnabled(true);
    webSettings.setDatabasePath("");
    webSettings.setDomStorageEnabled(true);
    webview.setWebChromeClient(new WebChromeClient());
    webview.loadUrl("http://www.xyz.com/test.html");
    ///xyz.com/test.html is a sample  :)
    webview.setWebViewClient(new HelloWebViewClient());
}

我的问题是,当我关闭应用程序后,本地存储的值就不再存在了。我可以使用默认浏览器浏览到同一页,而且即使关闭模拟器,该值仍然是持久的,这正是我要寻找的行为。
这可能是一些非常简单的东西...有任何想法吗?
3个回答

7

看起来空字符串DatabasePath是问题所在。我尝试了类似的代码,但是如果路径为空字符串,则该值在应用程序退出后无法持久化。如果我定义一个特定的数据库路径,该值将按预期持久化。

尝试:

webSettings.setDatabasePath("/data/data/"+this.getPackageName()+"/databases/");

@MrM,先生,如果您的问题已解决,您应将其标记为正确答案并点赞它,您可以看到答案左侧有一个勾选框。 - neevek
1
你应该将 "/data/data" 替换为 "context.getFilesDir().getPath()"。 - ban-geoengineering

2
如果您的应用程序使用多个Web视图,则仍然会遇到麻烦:localStorage未在所有Web视图之间正确共享。
如果您想在多个Web视图中共享相同的数据,唯一的方法是使用Java数据库和JavaScript接口进行修复。 此页面在GitHub上展示了如何做到这一点。
希望这有所帮助!

我还想提一下,有一个混合框架Cobalt(http://cobaltians.org),可以帮助您在本地应用程序中管理多个Web视图。 这是面向本地和Web开发人员的工具。 您应该去看看。 - Guillaume Gendre

1

无法在所有设备上运行(特别是ICS)- 即使使用数据库路径、启用DOMStorage等 - 使用cookie代替帮助了我。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接