Как вызвать один и тот же API с разными данными, несколько раз используя модификацию? - PullRequest
0 голосов
/ 03 мая 2020

Сценарий таков, что я загружаю продукты, используя идентификаторы категории. Поэтому я сделал для l oop многократный вызов API.

for (category in response.body()!!.categories) {
                        getProductByCategory(category)
                    }

Проблема в том, что иногда я теряю данные в getProductByCategory API, а иногда и порядок их изменения. Я хочу, чтобы мой API вызывался 1 за другим, но не раньше, чем предыдущий API был полностью выполнен. Ограничение: я не могу использовать .execute(), так как хочу, чтобы мой API был асинхронным.

private fun getProductByCategory(category: CategoriesModel) {
    RetrofitClient.instance.productByCategory(category.id)
        .enqueue(object : Callback<ProductsInCategory> {
            override fun onResponse(
                call: Call<ProductsInCategory>,
                response: Response<ProductsInCategory>
            ) {
                //dialog.hide()
                //Log.e("TAG", "Product by Category Response: " + response.toString())
                if (response.body() != null) {
                    arrayProducts = response.body()!!.products
                    array.add(AllProductsModel(category, arrayProducts))
                    adapter.notifyDataSetChanged()
                }
            }

            override fun onFailure(call: Call<ProductsInCategory>, t: Throwable) {
                Toast.makeText(context, t.message, Toast.LENGTH_LONG).show()
                Log.e("TAG", "Failed Response: " + t.message)
                Log.e("TAG", "Failed Response Localized: " + t.localizedMessage)
                dialog.hide()
            }
        })
}

Я не уверен, должен ли я использовать работающий поток в этой ситуации или асинхронную задачу c или любой другой метод, связанный с наблюдаемым.

...