2014-05-10 61 views
4

我想使用HTML和JavaScript构建一个基于浏览器的离线应用程序来收集Android平板电脑上的调查数据。该应用程序将包含一些带有表单的静态页面,供用户输入数据,然后使用Web存储或IndexedDB将其存储在本地。不过,我也想构建一个小型原生Android应用程序,它可以获取这些数据并将其传输到其他设备。这是可能的,如果是的话,我会怎么做呢?从Android浏览器之外访问Web存储或IndexedDB

具体而言,我想了解本机应用程序是否以及如何访问浏览器的数据存储(我可以管理其余部分)。我宁愿使用Android浏览器,但可以使用任何其他功能,如果这样做更容易。我发现这个blog post,这表明它可能是可能的,但我会感谢一些指针,指出Android浏览器存储数据的位置以及另一个应用程序可以轻松访问的位置。

+2

我不知道,你可以很容易地做到这一点在你所问的方式,但你也许可以用这些例子来创建一个应用程序,都使用普通的Android数据存储,而显示网页和管理数据通过将数据从js传递到本机应用程序,可以获得比基于浏览器的数据存 http://stackoverflow.com/questions/6357191/how-to-pass-data-from-javascript-to-android-webview-in-this-case http://stackoverflow.com/questions/5264489/how -do-i-pass-return-values-from-a-javascript-function-to-android –

回答

1

最简单和最健壮的方式来将所有记录序列化并在第一次运行时加载到您的应用程序中。

+0

感谢您的建议。您的意思是浏览器应用程序会将记录序列化,然后用户将不得不将这个文件保存为一个文件,然后原生应用程序将访问该文件? – Stuart

4

不幸的是我不认为数据流可以按照你想要的方式工作。在Chromium WebKit实现中,IDB将数据存储在您应该无法访问的levelDB文件中(按设计)。

那么我们如何让Java和JavaScript一起玩呢?这是一个很好的问题!正如我所看到的,将Java数据转换为IDB数据的唯一好方法是通过客户端。

我有很好的IDB印章,但我的Android体验是非生产。从我了解的是,这里有一个建议的解决方案:

  • 通过本机应用程序的意见
  • 写一个字符串在沙箱中的文件与数据存储为JSON BLOB或在.html<script>附加收集数据到JavaScript全球
  • 负载,可以访问本地URI像file://android_asset/blah.json,然后网页视图运行一些IDB代码批量将其插入IDB
  • 使用IDB店来驱动你的基于Web的意见

因此,“本机应用程序访问浏览器数据存储的方式和方式”的答案是:尝试相反。将其设计为让您的浏览器访问您的本机应用程序数据存储。

+0

非常感谢。我可以看到,拥有独立的本机应用程序和离线网络应用程序可能无法正常工作,我应该在本机应用程序中使用网页浏览。但在那种情况下,为什么要使用IDB?在本地应用中执行所有数据存储工作不是更好吗? – Stuart

+0

是的,可能。使用IDB只有一个很好的理由,那就是如果您需要在网络上“按比例”索引键值存储。如果你本土化,我会使用本地数据存储,如['sqllite'](http://developer.android.com/reference/android/database/sqlite/package-summary.html)。 (实际上,这就是Firefox实现IDB的原因:在SQL之上。) – buley

+0

我想要考虑一个用于web-> native数据流的选项:你可以让你的客户端代码创建Java可以使用的数据URI。当前的stumper:你如何将这些URI从客户端传递给本地,除非它们共享一个文件系统?他们可以通过FileWriter API共享一个fs吗? – buley

0

,如果你愿意尝试一个稍微不同的方法这是可能的:

  1. 从HTML5应用拉出数据是棘手,但将数据推送到本机应用程序更加容易。您的HTML5应用必须拥有原生容器。容器API是否包含访问原生ContentProviders的方法?如果没有,你可以添加自己的本地代码到容器来做到这一点吗?基本上,如果您可以访问ContentProviders,那么您的本机应用程序只需实现具有插入权限的ContentProvider(可以仅限于您的HTML5应用程序)。插入后,本机应用程序可以根据数据执行任何操作,包括将其广播到其他设备。

  2. 如果你坚持从HTML5应用程序提取数据,这可能只有当本机和HTML5应用程序实际上是相同的应用程序,并且只有当你的容器允许你添加自己的本地代码时才有可能。然后,您将通过WebStorage类直接访问WebView的存储。

+0

在没有任何研究或文档的情况下建议本地容器看起来没有帮助。我知道这是不可能的。如果我错了,我会有兴趣看到支持文档,我会改变我的失望,但据我所知,Cordova只支持Windows和BlackBerry的IDB。其他“容器”不支持IDB。 – buley

+0

我从来没有对IDB说过什么。你混淆了你自己的解决方案。 –