【问题标题】:How to store JSON data from API call如何存储来自 API 调用的 JSON 数据
【发布时间】:2011-05-09 17:56:59
【问题描述】:

我是新手程序员,所以请随意评论一些没有意义的东西,以便我可以学习。

我正在开发一个咖啡店查找器 Android 应用程序,该应用程序调用 SimpleGeo API 以获取每个感兴趣的地方。我很难想出一种方法来以我可以用于我的目的的方式存储返回的 JSON 数据。我需要对数据做两件事:首先,我需要一个地图覆盖类来访问它,这样我就可以为每个咖啡店绘制标记(我可以接受);其次,我需要在列表视图中显示数据。

API 调用:

    /** Queries SimpleGeo with current location **/
    private void getJSONData() {
    SimpleGeoPlacesClient client = SimpleGeoPlacesClient.getInstance();
    client.getHttpClient().setToken(oauth_key, oauth_secret);
    double radius = 25;
    try {
        client.search(lat, lng, "coffee", null, radius,
                new FeatureCollectionCallback() {
                    public void onSuccess(FeatureCollection collection) {
                        try {
                            features = collection.toJSON();
                        } catch (JSONException e) {
                            System.out.println(e.getMessage());
                        }
                    }

                    public void onError(String errorMessage) {
                        System.out.println(errorMessage);
                    }
                });
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

解析数据:

    private void parseJSONData() throws JSONException {
    for (int i = 0; i < features.length(); i++) {
        JSONObject feature = features.getJSONObject(i).getJSONObject(
                "feature");
    }
}

我目前正在尝试使用this 教程中概述的 GSON 从数据中创建 java 对象。 SQLite 适合这个吗?任何专业提示将不胜感激。

谢谢。

【问题讨论】:

    标签: java android json parsing gson


    【解决方案1】:

    假设您使用的是 android,您可以使用 google map view

    view,com.google.android.maps.MapView http://developer.android.com/resources/tutorials/views/hello-mapview.html

    和列表视图 http://developer.android.com/reference/android/widget/ListView.html

    我看不出 SQLite 如何适合这里,除非您计划在应用程序重新启动时存储这些位置。 您需要做的就是从 JSON 中提取地点信息,然后对这些数据做任何您想做的事情。

    【讨论】:

    • 感谢您的回复。我已经设置了我的地图视图和列表视图。列表视图当前指向一个虚拟数组,并且地图正在运行。主要问题是我不确定处理 JSON 数据的最佳方式。抱歉,如果不清楚。
    • 您必须详细说明“处理 json”是什么意思。您想将其存储在磁盘上吗?您在从 JSON 中提取信息时遇到问题吗?等等...
    • 我确实想存储这些信息,以避免不必要的 API 调用。这就是为什么我认为 SQLite 可能适合这种情况。我正在尝试使用 gson 将信息提取到一个 java 对象中,然后我可以使用它来绘制地图叠加层并创建一个可以在列表视图中显示的数组。我应该问的是,从android开发的角度来看,这种方法是否有意义?你能预见到这种技术有什么问题吗?这些问题可能看起来微不足道,因为我从未尝试过使用这些方法中的任何一种。
    • 我认为将 JSON 数据存储在文本文件中,或者如果确实需要,存储在 SQLite 中是一种非常标准的做法。我没有用过 GSON ,看起来它是一个有用的库,如果这不起作用,您可以随时切换回手动提取并映射到所需的类。
    • 感谢您的帮助。我知道这个问题很模糊。当我对这个主题知之甚少时,用这个问题的措辞可能是一个挑战。
    【解决方案2】:

    我意识到答案已经被接受了,但我还是把我的 2 位扔进去了……

    响应 JSON 可能不需要持久化(在 SQLite 或文本文件中),以“避免不必要的 API 调用”。需要更多有关该应用的信息来确定这一点。

    从我朋友要求我校对的博客文章中复制:

    在某些情况下,GSON 使得从 JSON 创建 Java 对象变得异常简单,尽管许多示例(尤其是博客文章中的示例)非常琐碎或不必要地复杂,通常只是复制粘贴示例(带有名称已更改)来自 GSON 文档,这是问题的核心 - 文档在他们的示例中并不是很详尽,而且它们很快就会让人觉得复杂的对象映射起来很复杂。

    但我离题了...

    如果问题在于不知道如何使用 JSON 和/或 GSON,这并不意味着该解决方案涉及 SQLite 或文本文件持久性或任何类型的持久性。

    关于原始问题中的代码,它看起来假设响应 JSON 中的对象将以某种特定顺序出现。根据我的经验,这通常不是一个安全的假设。有时 itemX 排在第一位,有时排在第三位。 (这当然取决于生成响应的系统。)因此,解析结果允许 JSON 对象的顺序发生变化。

    关于是否保留 JSON 数据,对于应用程序,需要了解的信息比目前所解释的要多。

    【讨论】:

    • StackOverflow 可能是进行编程帮助对话的好地方。考虑到您已经接受了原始问题的答案,您还有什么其他问题?
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多