用于在磁盘中存储文件以及在db中存储信息的内容提供程序

时间:2011-12-30 20:28:49

标签: android sqlite filesystems android-contentprovider

我正在构建一个应用程序,它将一些信息存储到数据库中并将一些信息存储在磁盘中。我只是想知道我该怎么做?

内容提供商是仅为数据库工作还是可以用来从磁盘中检索内容?我计划使用内容提供商,因为我可能希望我的数据出现在全局搜索等中。

所以,基本上我想每次都从数据库和磁盘中检索信息。如果我可以使用内容提供程序从磁盘访问内容,我应该知道有两个内容提供者还是只有一个(访问SQLite和磁盘)

2 个答案:

答案 0 :(得分:3)

在内容提供商的查询方法中,您可以从磁盘/网络中获取数据,然后返回构建MatrixCursor的数据。

这是来自android doc。

的基本example

答案 1 :(得分:2)

阳光,

您可以通过多种方式从磁盘,数据库或Web访问数据。使用或不使用ContentProvider的原因不是由于它的功能(当您构建其数据接口时),而是由于需要访问该数据的内容以及您希望如何分发它。从本质上讲,它更像是一个访问问题(安全级别)。 (即您的数据和访问它们的工具有多敏感)

如果您在多个包中有多个对象访问数据,那么ContentProvider可能就是您的选择。如果多个包是单独的应用程序,则尤其如此。更重要的是,ContentProviders允许对特定数据的通用请求。也就是说,应用程序可以通过简单地询问联系人来请求联系人,而不是知道提供者是谁或者是什么。

最终,决定了您希望数据访问的内容和方式。如果您希望它本地化,并且您希望应用程序“确切地”知道它所要求的内容,ContentProvider如何以及可能不是您的最佳选择,因为所有这些都可以使用本地化类和自定义专用适配器来完成满足您的需求。如果您确实需要多个组件或程序来访问您的数据,那么需要考虑这个问题,但问题是关于请求者以及源是否对请求者很重要。

您的下一个问题是,如果您使用ContentProvider,您应该使用多个。同样,您可以根据自己的需求选择实施方式。但是,有一些好的做法可以为您提供一些指导。每个班级应该真的做得很好,而且应该具体。如果您的ContentProvider无论如何都应该提供数据,那么可以在同一个Provider中实现这两者,但可能有点棘手。如果您的请求者(通常是一个Activity)区分磁盘和db,那么它应该是多个Providers。尽管我不愿意这样说,但你必须定义你需要它做什么,因为我们所能做的只是提供选择,考虑因素和后果。但是嘿!!这是编程的美妙之处!你可以选择你需要的东西,让解决方案完全符合这些需求,从而找到新的方法去做你从未学过的东西。

希望这有帮助, FuzzicalLogic