【问题标题】:Database Paging in AndroidAndroid中的数据库分页
【发布时间】:2013-07-06 15:08:54
【问题描述】:

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

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

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

【问题讨论】:

    标签: android json pagination


    【解决方案1】:

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

    【讨论】:

    • 好的。我可以实现“从json获取部分数据并存储到db然后获取agin部分数据”的结构吗?
    • 是的,这正是我所说的。但是您必须在 服务器 端进行,而不是在客户端。但它不是“结构”,它基本上是一段代码。
    • 但是相同的 URL 在 iPhone 上也可以正常工作。我不知道怎么办?但它不是问题。我的问题是我应该从 Andorid 方面做什么
    • 你可以硬着头皮接收 JSON 数据作为普通字符串,然后自己组合适当大小的 JSON 对象,但这值得吗?
    • 表示Android端没有处理情况的方法或方法
    【解决方案2】:

    如果我知道我会有很多行/数据,那么我会运行一些简单的 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 行,它应该不会遇到任何内存问题?

    【讨论】:

    • 这真的取决于你的数据是如何组织的,代码太具体了,不能放在这里。正如我上面所说,你能提前算出你的主 SQL(从 android 调用 web 服务)返回了多少行吗?我有示例代码,但需要知道您首先了解我的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多