在android-pattern上从webservice缓存JSON?

fmo*_*fmo 9 java android json caching web-services

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

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

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

Jef*_*man 8

这是一个简单的方法来做这个不涉及服务,线程,警报等等只是定义一个围绕你的JSON包装,如,

class MyJson {
    JSONObject getJson() { ... };
}
Run Code Online (Sandbox Code Playgroud)

执行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;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,在需要时从网络中获取新鲜的json.这比通过设置警报和运行服务来更新缓存来定期更新缓存文件要简单得多......

从您的应用程序中,无论是第一次加载还是第N次加载,您都会做同样的事情.你打电话getJson(),

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

唯一的缺点是,有时候,获取JSON的调用会花费更长的时间,因此你必须在一个线程中运行它以便不对ANR进行操作......但是无论如何你应该这样做,因为它是在文件中还是从网络中获取,您应该避免在UI线程中执行IO.