如何使用 volley 下载一定数量的 JSON

Posted

技术标签:

【中文标题】如何使用 volley 下载一定数量的 JSON【英文标题】:How to download certain amount of JSON using volley 【发布时间】:2018-06-05 01:57:09 【问题描述】:

有没有办法从JSON下载一定数量的行? 我有一个 mysql 数据库转换为 JSON。

JSON 数据很大,超过 1000 行。显然,我无法一次将它们全部下载并解析到我在 android 中的 SQLite database 中。

我需要在Recyclerview scrolling 上下载几行并加载更多内容。我如何告诉 volley 加载一些 JSON 行而不是全部?

【问题讨论】:

你的 Json 来自哪里? 你需要从服务器端进行分页,而不是在android中 您可以从服务器端使用分页,例如:第一次 20 项 ..加载更多类似 【参考方案1】:

在使用 SQL Query 从 MYSql Server 获取数据时使用 LIMIT

SELECT * FROM your_table WHERE your_condition LIMIT number_of_rows;

这将在获取数据时仅返回 number_of_rows 行。

SELECT * FROM your_table WHERE your_condition LIMIT starting_row,ending_row;

这将在获取数据时仅返回从 starting_rowending_rown 个 行。

【讨论】:

它从第一行获取有限的数据。如果我记得它会下载相同的行。我如何告诉它获取下一行? @Sorena 您可以参考 ***.com/questions/1492297/… 以实现您请求的功能 将 Limit 和 Offset 作为参数传递。让你轻松实现功能 对不起,我不明白。如果我设置偏移量和限制,它将获取从偏移量开始的有限数据。每次调用的偏移量都是相同的。 将偏移量和限制作为 GET 参数传递...每次都会更改,您将获得更新的值...如果这对您来说似乎很困难,请尝试使用分页。对我来说,我觉得这更容易。每个人的观点都不一样。所以尝试不同的方法【参考方案2】:

通过分页,您可以实现这一点。基本上在服务器端,您创建的 API 将返回一组数据,例如 50 组或 100 组或可能更多,因此,无论何时您将在 ListView 或 RecyclerView 中加载该组并单击“加载更多”或滚动结束时,您都会调用相同的API 再次获取其他数据集并加载到应用程序中。

如果您使用 Volley,则使用相同的逻辑来实现它

【讨论】:

对,我限制了php 以获取有限的数据。我怎样才能使那个 API 在加载更多时返回下一行。不再是相同的行。 好吧,让我们考虑在这里设置 50 个,在服务器端,您有大约 40k 行,其中所有行都具有唯一的 ID,让我们将其视为 rowId。现在对于第一次 API 调用,您将 0 作为 rowId 传递,以便 API 了解这是第一次调用,并将返回前 50 组数据以及最新的 rowId。存储这个 rowId 并在下一个 API 调用中传递这个最新的,现在服务器将考虑这个 rowId 并在数据库中搜索,一旦匹配,API 将返回下一个 50 集。同样,您在加载更多事件时继续 API 调用。

以上是关于如何使用 volley 下载一定数量的 JSON的主要内容,如果未能解决你的问题,请参考以下文章

使用 volley 库解析 JSON 数据的问题

如何在 kotlin android 中使用 volley 获取 json

Android Kotlin Volley 如何发送 JSON 数据

如何在 android 中使用 Gson 或 VOLley 从 json 中删除空值

java - 如何使用Java中的Volley库将JSON api数据放入recyclerview?

如何通过带有标头的 volley 发布 JSON 请求?