如何确保 onResponse 的执行顺序与请求的顺序相同?
Posted
技术标签:
【中文标题】如何确保 onResponse 的执行顺序与请求的顺序相同?【英文标题】:How to ensure an execution of onResponse in the same order as it has been requested? 【发布时间】:2021-12-01 16:39:42 【问题描述】:我有一个 recyclerview,我在其中调用 onBindViewHolder 函数中的休息服务,因此当适合屏幕的行或 recyclerview 滚动到某些行时会调用它。
我正在通过这样的改造来做到这一点:
Call<FotografiasGeoBean> call = restClient.getData(allNeededParams);
重点是我想保存 recyclerview 的值,所以如果我通过按 recyclerview 行进入另一个活动然后返回,则不必再次进行所有调用。
看起来我有代码可以做到这一点,除了我无法确保按照请求的顺序接收值的问题,例如,如果我为 recyclerview 上的第 0 行提出请愿,并且然后是第 1 行的请愿书,我可能会在第 0 行的答案之前得到第 1 行的答案,然后如果我将值保存在 ArrayList 中,那就不正确了。
哪种方法可以确保正确执行,以便 ArrayList 中保存的值始终与 RecyclerView 中行位置的值匹配?
【问题讨论】:
您的请求和响应处理程序应该知道/包含行号。哪个响应先出现并不重要。 【参考方案1】:我不确定您想要什么是保存数据的好方法,但是对于您想要的,最好使用HashMap
而不是Arraylist
,这样您就可以将值与其位置并检索它们,无论添加顺序如何。
HashMap<Integer, YourDataClass> hashMap= new HashMap<>();
hashMap.put(1,yourData1)
hashMap.put(0,yourDatat2)
// and you can retrieve data like this in any order you want
hashMap.get(1) // returns value at position 1
hashMap.get(0) // returns value at position 0
要在 ViewHolder 中查找位置,您可以使用 getAdapterPosition()
方法
【讨论】:
以上是关于如何确保 onResponse 的执行顺序与请求的顺序相同?的主要内容,如果未能解决你的问题,请参考以下文章
Android Volley 的 onResponse 方法未执行