有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在安卓模式下从webservice缓存JSON?

我想在我的安卓应用程序中缓存来自json Web服务的数据。应用程序第一次启动时,应该等待所有数据从服务加载。首次加载后,应用程序应不时(几天)检查是否有新数据可用。如果是,则应在下次启动应用程序时刷新并加载本地存储的数据

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

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


共 (1) 个答案

  1. # 1 楼答案

    这里有一个简单的方法,不涉及服务、线程、警报等。只需在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的调用会花费更长的时间,因此您必须在线程中运行它,以免破坏UI。。。但无论如何都应该这样做,因为无论是在文件中还是从网络中获取,都应该避免在UI线程中执行IO