-1

我想从 JSON URL 获取数据。它包含 22 个字段,超过 6000 行。我想解析这个 JSON 数据并将其存储在 SQLite 数据库中。

我知道 JSON 的基础知识,但是当我使用它时,我得到一个“内存不足”的错误。经过大量的研发和谷歌搜索,我发现我必须使用 GSON for Heavy URL,但我不熟悉它。

我可以在 JSON 中实现分页吗?换句话说,我是否可以从 JSON 获取部分数据并将其存储到数据库中,然后请求某些数据并将其存储到数据库中,继续该过程直到解析完整的 JSON 文件?

4

2 回答 2

0

如果我知道我会有很多行/数据,那么我会运行一些简单的 SQL 调用来确定数据的大小。然后分解 Android 中的原始 JSON,以更小的块处理数据,在每个段之后提交。因此,在您的示例中,您知道您有 6000 多行 - 将其作为 int 存储在 Android 中的内存中,然后一次调用 1000 行。

进一步查询后的一些代码:

    String locationCountPath = "http://mywebserver/countAllMD5UserLocations";
    try {
        //My method to return a count of locations
        int locCount = MyJSONUtilities.countAllUsersLocations(
                locationCountPath, MyJSONUtilities.writeUserDetailsJSON(
                        username.toUpperCase(), password));
        // Compare new count with count on phone
        if (countLocs != locCount && locCount > 0) {
            try {
                // Grab the new set of locations
                askToSyncLocations();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

因此,如果您将 askToSyncLocations() 方法替换为您自己的方式来处理循环中的 6000 多行,一次批处理 1000 行,它应该不会遇到任何内存问题?

于 2013-07-09T10:46:01.133 回答
0

您必须在服务器端(为您提供 JSON 数据的服务器端)实现分页机制,并将范围参数作为您提到的 URL 的一部分传递。

于 2013-07-09T06:03:27.477 回答