首页 > 解决方案 > 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)
    }
}

不确定这是否是最好的方法,但到目前为止它对我来说效果很好。

标签: javaandroidkotlinparsingandroid-volley

解决方案


我认为没有。Volley仅负责移交您从服务器请求的数据。解析以多种方式完成,主要使用GSON库。如果需要,可以使用worker在后台解析数据并将其存储DataStore为一小部分,然后访问数据。

这实际上取决于你真正想要什么。如果您想避免在运行时将大量数据存储在内存中,您可以考虑一次性解析,然后将其分解为您喜欢大小的小块,并将其存储DataStore为 JsonString 或类似的数据库中Room,然后从那里访问它. 如果您的系统有大量数据,您可以考虑为此目的使用本地数据库。由于解析器通常不了解数据结构,因此在解析数据之前不可能知道行数。


推荐阅读