谷歌IO REST设计模式,完成ContentProvider但卡在从网络获取数据上了。

30

在观看了关于这个主题的知名视频后,我决定使用设计模式B。使用ContentProvider和ServiceHelper。

google design pattern on rest

我有以下文件:

  • MyProvider
  • MyDatabase
  • Mycontract

在活动中,我现在可以获取ContentResolver并查询提供程序。到目前为止一切都很好。

现在我需要同步我的ContentProvider以从REST API获取数据。 因此,我需要实现一个Service Helper服务和Rest方法。 研究Google IO应用程序对我很有帮助,我是一个Android新手,所以仍然很难理解它。

我看到Google使用RemoteHandlers来处理外部数据,我想它们是图表中的Processor类?

我不明白的是如何实现servicehelper + service部分以从网络获取数据。

  • 我在哪里调用Service Helper?
  • 服务和Helper需要做什么?
  • 有没有这种精确设计模式的好例子?

我已经阅读了Stack上的几个主题,所有主题都建议不同的方法。我找到了一个示例,它声明了一个restprovider,然后myProvider必须扩展该提供程序。我不喜欢那些解决方案,想按照这个结构化设计模式进行。


我认为你可以在这个项目中找到所有的答案:https://github.com/necronet/Eli-G它已经在这篇SO帖子中详细说明了。 - Zakaria
2
你好,Zakaria。我一周前找到了那个例子,但它是一个非常糟糕的模式实现。它创建了另一个Contentprovider来处理REST,而不是一个服务。谢谢你的回复,但我正在寻找如图所述的该模式的完整实现。@John http://www.youtube.com/watch?v=xHXn3Kg2IQE - Sam
@Samvdb:你看过Eli-G解释那个逻辑的SO帖子了吗? - Zakaria
@vaiomike,事情进展得很顺利,我花了很多时间来掌握它,但一旦你掌握了它,你将在所有项目中使用它!不幸的是,我不能给你一个例子,因为我正在工作的项目是闭源的(它不再属于我)。祝你实现成功!这是值得的。另外:我研究了谷歌IO 2011应用程序的实现,并从那里开始。他们没有完全像上面的方案那样使用它。 - Sam
@vaiomike 源代码已经可用:https://github.com/samvdb/TracknTrace - Sam
显示剩余5条评论
1个回答

20

我的理解是:

  • 不显示空活动并在后台加载内容。当加载失败时,无法显示任何内容。
  • 相反,显示通过内容提供程序和适配器访问的存储在数据库中的数据 - 这保证用户始终看到内容
  • 在后台获取新数据,一旦数据在手机上,适配器会自动更新活动

针对您的问题(我改变了顺序):

在哪里调用服务助手?
我选择了Vigils talk中的模式A。在这种情况下,调用取决于您的应用程序。您可以在应用程序启动时触发更新,创建活动时或用户选择更新按钮时触发。我会选择在活动创建时。

您选择了模式B。在这种情况下,很明显内容提供程序必须触发更新。什么时候?要获取新数据:在创建时或第一次读取访问后。我会在创建时使用该方法。对于创建,更新和删除,请在内容提供程序中执行相应的操作。

有没有这个精确设计模式的好例子?
从我的帖子中https://dev59.com/fW445IYBdhLWcg3wRoPH#8693919:我知道的唯一开源参考实现可在http://datadroid.foxykeep.com下找到。这是一个您可以在自己的应用程序中使用的库。结构说明位于/presentation下 - 确保阅读。

服务助手需要做什么?
如果您查看幻灯片19上的幻灯片,它是一个单例,封装了对服务的调用,并通过请求ID处理异步调用。

服务需要做什么?
服务(演示文稿的幻灯片17)只是确保操作在后台执行。


Datadroid声称是选项A的实现,而不是选项B。它错了吗? - Estel

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