最初从本地db表填充UI,然后如果webserivice具有新的数据更新表和UI

时间:2013-09-13 13:28:08

标签: java android sqlite android-loadermanager

好的,这是我的第一篇文章,

我有一个从本地数据库表填充的ListView。从那里我必须检查是否有新的数据来自Web服务,如果是这样,首先我必须更新该特定的表然后UI。

现在我需要大致了解如何实现这个目标?

来自网络服务的数据不会经常变化。所以我需要创建一些架构/机制,其中数据总是首先从数据库加载然后如果新数据可从Web服务获得,那么我解析服务更新表然后更新UI。

基本上我想要这样的东西

    MainThread
        |
        |
        |-------->>--------separate thread----->>-----|
        |                                             |
        |                    listener/              query db,
   populate UI <<----------- observer/  ------<<----get data 
        |                    something                |
        |                                             |
        |                                             |
        |                                             |
        |                               check if we have new data--->> if no-- DONE       
        |                                             |
        |                                           if yes
        |                                             |
        |                                     call web service,
        |                                         fetch data,
        |                                        update table
        |                     listener/               |
    update UI  <<-------------observer/-----<<--------|
        |                     something               
        |

有点像Tumblr android App ..

现在我认为我可以通过在类和接口(作为观察者/监听器)中包装AsyncTask来实现这一目标

但我喜欢使用Loader(在android中可用),

还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

好问题!

您似乎正在尝试实现着名的Google I / O设计模式? Google IO Rest design pattern, Finished ContentProvider and stuck now https://www.youtube.com/watch?v=xHXn3Kg2IQE

我过去做过(可能没有应该做的那么好;-))。我的建议是肯定这两点:

  • 你的桌子不是太复杂
  • 您的更新并非总是如此。

如果不是这样,由于数据库访问,您可能会遇到性能问题。 但这是一个非常好的模式。

另一个建议是使用事件总线而不是锅炉板,令人沮丧的界面更新UI。 (我完全使用这个https://github.com/greenrobot/EventBus没有性能问题,Otto既好又简单,但不能很好地与android-annotations集成。)

希望它会有所帮助。