Сценарий таков, что я загружаю продукты, используя идентификаторы категории. Поэтому я сделал для 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 или любой другой метод, связанный с наблюдаемым.