我的应用程序中是否真的需要Content Provider?

时间:2015-10-10 14:56:37

标签: android sqlite rest android-sqlite android-contentprovider

我正在创建应该具有离线模式的应用,因此以前下载的数据应存储在某处,最常见的方式是将数据存储在SQLite数据库中。

大多数SQLite数据库与android中的Content Provider一起使用。我清楚地了解内容提供商的目的是什么(在不同应用程序之间共享数据),但在我的情况下,应用程序永远不需要与系统中的其他应用程序共享数据。

Content provider具有与HTTP请求(GET,POST,PUT,DELETE)类似的界面 我的想法是创建可以像这样使用getAllLatestNews();的外观类,首先它将尝试从互联网获取最新数据,如果失败 - 将使用来自数据库的数据,如果请求成功,它也将保存检索数据到数据库。这个类将是用于分隔不同应用程序层的外观(不是直接从活动发出请求)。

但是现在我有点困惑地决定我何时需要Content Provider。我可以使用SQLiteOpenHelper类来检索数据并将数据保存到数据库中,甚至可以使用ORM库来执行此操作 首先,我想通过REST API Pattern B实施Virgil Dobjanschi。但是现在我不确定这个,也许最好为Robospice(在我的情况下,在服务中的网络请求)请求创建外观并在那里做持久性?

请分享您对此主题的看法,如有任何帮助,我将不胜感激。

修改

我问了这个问题,因为我觉得直接从活动中提出请求是不好的做法,即使它们是在服务范围内进行的,我想分开我的应用程序的不同层,以使其更灵活,可维护性。

2 个答案:

答案 0 :(得分:3)

由于您不打算分享您的数据,我会说实施ContentProvider是过度的。

我个人非常喜欢ORM图书馆(目前我在几个项目中使用SugarOrm),所以我会走这条路。

然后在应用启动时,您将检查您是否拥有有效的互联网连接,并根据该连接在线获取最新信息,或从数据库中检索旧信息。

为了分离逻辑,我很可能在服务中实现在线信息的获取,然后将其存储在数据库中并广播到信息现在可用的活动,然后活动可以检索来自新更新数据库的信息。

答案 1 :(得分:2)

内容提供商绝对是在应用程序之间共享数据,没有这个目的是没有用的。

如果您想私下在您的应用中使用这些数据,您可以使用SQLite数据库。还有其他可用的对象:

  • 共享偏好设置
  • 文件
  

内容提供程序具有与HTTP请求(GET,POST,PUT,DELETE)类似的接口

我不这么认为。它更像是SQL语言。