【问题标题】:Best way to cache an XML/JSON response into my application. Full text file?将 XML/JSON 响应缓存到我的应用程序的最佳方式。全文文件?
【发布时间】:2011-10-03 10:21:17
【问题描述】:

我目前在我的各种应用程序中使用 XML 或 JSON 网络服务。

我只是想知道将这些答案缓存在文本文件中的最简单方法。

我一直在考虑数据库,但这似乎过于复杂!

所以,我想做的是

  1. 要将这些 xml/JSON 文件存储在手机内存中,我应该这样做吗?

    String FILENAME = "MyXmlFile";
    String string = "hello world!";
    
    FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_PRIVATE);
    fos.write(string.getBytes());
    fos.close();  
    
  2. 在我的应用程序的 onCreate 中,我想解析这个文件。由于所有教程都展示了如何从 Web URL 解析文件,我从来没有找到解析内部文本文件的方法。有人对此有什么建议吗?

谢谢。

【问题讨论】:

    标签: android xml json web-services caching


    【解决方案1】:

    您可以应用 SharedPreferences,它也是一个 XML 文件。只需先解析您的 JSON/XML,提取所有键/值对,然后写入您的 pref 文件。下一次,在加载 onCreate() 时,只需从 pref 重新加载键/值。 此示例可能会给您一个开始:
    http://android-er.blogspot.com/2011/01/example-of-using-sharedpreferencesedito.html

    【讨论】:

    • 为了在 Java 中解析 JSON,我强烈推荐 Google 的 GSON - code.google.com/p/google-gson
    • 是的,GSON 真是太棒了。关于偏好中的键/值对,我认为这将很难,因为我不知道项目的数量,我在内存中,我也可以优先存储这个数字,但我会先尝试 Hamant Sharma 解决方案,如果不适合,会试试你的。
    【解决方案2】:

    另一种方法是使用很棒的http-request 库。它允许您使用 ETag 检查响应是否未修改(HTTP 304 Not Modified)。如果未修改,则使用文件缓存中的 JSON,否则请求获取新资源。

    File latest = new File("/data/cache.json");
    HttpRequest request = HttpRequest.get("http://google.com");
    //Copy response to file
    request.body(latest);
    //Store eTag of response
    String eTag = request.eTag();
    //Later on check if changes exist
    boolean unchanged = HttpRequest.get("http://google.com")
                                   .ifNoneMatch(eTag)
                                   .notModified();
    

    【讨论】:

      【解决方案3】:

      这将与您编写 XML/JSON 相反。 使用 openFileInput 获取 FileInputStream。将流读入字符串,然后解析。

      【讨论】:

        猜你喜欢
        • 2019-06-06
        • 1970-01-01
        • 2011-12-10
        • 2018-03-16
        • 2011-04-26
        • 2014-12-11
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多