cachingJSON从web服务android – 模式?

我想caching从我的android应用程序json-web服务的数据。 第一次,应用程序启动,它应该等待,直到所有的数据从服务加载。 在初始加载之后,如果有新的数据可用,应用程序应不时检查(有些日子)。 如果是的话,应该在下次启动应用程序时刷新本地存储的数据并加载。

目前我试图通过一个IntentService解决这个问题,并将加载的数据保存在一个文件中 – 但我不是一个非常干净美丽的方式!

有没有人知道一个干净的方式来做到这一点? caching模式?

  • iPhone / Android的webapp包装
  • 在网页中使用zxing条码扫描器
  • 使用无头浏览器进行Android Web Scraping
  • 用无头浏览器扫描Android网页
  • 如何从android调用.NET Web服务?
  • Android:在Activity上下文之外使用WebView
  • authentication后防止Captive Portal自动closures(Android)
  • 如何使用GCM从Java服务器向Android应用程序发送通知?
  • 这里有一个简单的方法来做到这一点,不涉及服务,线程,警报等,只是定义一个围绕你的JSON包装,

    class MyJson { JSONObject getJson() { ... }; } 

    getJson()的实现如下,

     if (cached json file exists) { if (json file last modified + 1 day > current time) { json = get from network; cache json in file; } else [ json = get from file; } } else { json = get from network; cache json in file; } 

    换句话说,当你需要的时候,懒得从networking中获取新鲜的json。 这比通过设置警报和运行服务来更新caching来定期更新caching文件简单得多。

    从您的应用程序中,无论是第一次加载还是第N次加载数据,都会执行相同的操作。 你调用getJson()

     new Thread(new Runnable() { public void run() { json = getJson(); // do whatever you need to do after the json is loaded } }).start(); 

    唯一的缺点是有时候,调用JSON会花费更长的时间,因此你必须在一个线程中运行它,以避免ANR UI …但是你应该这样做,因为不pipe它在文件中还是在文件中从networking获取,你应该避免在UI线程中做IO。