java - Android Volley:如何小批量解析NetworkResponse大响应?
问题描述
我正在使用 Volley 发出网络请求并解析它们以在我的 android 应用程序中显示数据。
目前,我正在使用Volley's
功能:
override fun parseNetworkResponse(response: NetworkResponse?): Response<Any> {....return Response.success(sectionData, null)}
和
override fun deliverResponse(response: Any?) {....}
为达到这个。
不幸的是,我正在做的解析parseNetworkResponse
需要几秒钟才能完成。我正在解析的数据包含数百行,我无法控制服务器。理想情况下,我希望能够解析 50 行并将其显示在我的 recyclerview 中,以便用户在我解析其余数据并将其添加到 recycler 视图适配器时可以查看一些内容。
有没有办法实现这种小批量解析?
编辑:我想出了一个适合我的解决方案。parseNetworkResponse
添加每个解析的行后,我将以下内容放在右侧:
if (sectionData.size >= 50) {
val toSend = SectionData(sectionHeaderTitle,ArrayList())
toSend.data.addAll(sectionData)
sectionData.clear()
lifecycleScope.launch {
deliverResponse(toSend)
}
}
不确定这是否是最好的方法,但到目前为止它对我来说效果很好。
解决方案
我认为没有。Volley
仅负责移交您从服务器请求的数据。解析以多种方式完成,主要使用GSON
库。如果需要,可以使用worker
在后台解析数据并将其存储DataStore
为一小部分,然后访问数据。
这实际上取决于你真正想要什么。如果您想避免在运行时将大量数据存储在内存中,您可以考虑一次性解析,然后将其分解为您喜欢大小的小块,并将其存储DataStore
为 JsonString 或类似的数据库中Room
,然后从那里访问它. 如果您的系统有大量数据,您可以考虑为此目的使用本地数据库。由于解析器通常不了解数据结构,因此在解析数据之前不可能知道行数。
推荐阅读
- php - 在服务器上找不到类 Google_client,但在 localhost 上没问题
- apache-spark - 将 Spark 的本地 tmp 文件夹放在共享目录中是否安全
- android - Google Play:未显示用于删除先前声明的新 APK 权限的表单字段“合规状态”
- python - TypeError:需要一个类似字节的对象,而不是已知纯文本攻击中的“str”
- android - 广播接收器在外部存储上获取媒体更改的正确意图过滤器是什么?
- linux - Linux tr 命令失败“未对齐的构造”
- sql - 如果存在NULL,则排除多个条目的内部联接查询
- android - 单击显示旧数据时使用 RecyclerView 搜索视图
- python - String Join 将 True 视为布尔值而不是字符串
- mysql - 如何将kafka连接到mysql?