在android-pattern上从Web服务缓存JSON?

时间:2012-03-23 00:30:44

标签: java android json web-services caching

我想在我的Android应用程序中缓存来自json-webservice的数据。第一次启动应用程序时,它应该等到所有数据都从服务加载。在初始加载之后,应用程序应该不时检查(某些天)是否有新数据可用。如果是,则应在下次启动应用程序时刷新并加载本地存储的数据。

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

有人知道干净的方法吗?缓存模式?

1 个答案:

答案 0 :(得分:8)

这是一种简单的方法,它不涉及服务,线程,警报等,只需在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;
}
换句话说,当你需要时,懒惰地从网络中获取新鲜的json。这比通过设置警报和运行服务更新缓存来定期更新缓存文件简单得多......

从您的应用程序

,无论是第一次加载还是第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线程中进行IO。