cachingJSON从web服务android – 模式?

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

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

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

Solutions Collecting From Web of "cachingJSON从web服务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。