如何确保 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 的执行顺序与请求的顺序相同?的主要内容,如果未能解决你的问题,请参考以下文章

如何确保JavaScript的执行顺序

Android Volley 的 onResponse 方法未执行

Volley Post 请求在 onResponse 内没有返回响应

JSON onResponse - 列表不会填充数据

如何确保三个线程顺序执行

如何确保JavaScript的执行顺序