【问题标题】:Handle latest query response Android处理最新的查询响应 Android
【发布时间】:2021-07-24 07:49:30
【问题描述】:
我有一个下拉菜单,可让您选择国家/地区的名称,然后在另一个底部根据所选国家/地区填充省/州。
当用户选择国家时,进行查询,然后分别更新省份
我遇到了一种情况,即查询响应到达之间存在竞争条件,最终显示不正确的数据。我该如何处理?
eg:用户选择国家A,查询被触发,网络慢,同时用户将国家更改为B,然后触发另一个请求,B的响应很快回来,但A的响应来了,现在屏幕是在一个国家说B但省属于A的州
注意:我不想在等待查询响应时阻止国家/地区选择器
有什么解决这个问题的建议吗?
【问题讨论】:
标签:
java
android
performance
kotlin
networking
【解决方案1】:
-
您可能希望在查询响应中添加一个简单的过滤器,例如
如果响应与当前匹配,则要显示的代码运行
询问。仔细配置你的回调代码,你只能拥有最新的
显示响应,因为您知道当前选择了哪个国家/地区。
(诚然,这可能不是做到这一点的最佳方法,但它应该可以工作。)
-
更一般地说,您必须结合网络请求和缓存/本地数据库来开发它。
- 如果您的数据集不是太大,或者不会经常更新,您可能只想将其放入本地数据库,例如房间 DB。
- 如果您的数据不符合此规范,并且可能会在后端更新,但整体数据集非常小,请尝试在应用启动时缓存数据集(国家和省份)。这样你的网络调用很轻,你总是有最新的数据,你的 UI 不再依赖于异步操作,你的代码也更简单。如果合适,您也可以在此处使用数据绑定。
- 如果您的数据集非常大,以至于在应用程序启动时获取所有数据是不可接受的开销,那么只有在每次用户更改过滤器选项时,您才应该纯粹使用网络请求。一种选择是您的回调代码被配置为忽略与当前选择的选项无关的任何响应。另一种选择是,您的 HTTP 相关架构(用于请求和/或响应)可以包含有关哪个“国家”生成 HTTP 请求的一些信息,以便您可以在响应对象中检查它。 (在大多数情况下,后一种选择可能被认为是矫枉过正,但有时在复杂的场景中,您可能出于一个或多个原因而不得不这样做,例如功能定义、简单性、整洁性等)
P.S.:我假设您已经在使用适当的库进行 HTTP 调用。