Как поставить в очередь запрос в retrofit2, чтобы избежать 429 от API - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь сделать много запросов http в retrofit2, и у меня есть проблема с моим API, которая позволяет мне выполнять только 6 запросов в минуту. Так что я пытаюсь сделать работу вокруг. То, что я хочу сделать, это поставить в очередь свои запросы, поэтому у меня есть 6 готовых запросов, затем каждую минуту я приостанавливаю вызов, а затем продолжаю вызов через минуту. Поэтому я избегаю кода ошибки: 429.

Вот где я делаю мой запрос

fun getEanItems(eanCode: ArrayList<String?>) {
    val service = RetrofitInstance().getRetrofitInstance().create(getItemApi::class.java)
    GlobalScope.launch(Dispatchers.Main) {
        repeat(eanCode.size) { count ->
            val call = service.getItemsData(eanCode[count].toString())
            delay(2500)
            call.enqueue(object : Callback<ItemsList> {
                override fun onFailure(call: Call<ItemsList>, t: Throwable) {
                    Toast.makeText(context, "Could not fetch data", Toast.LENGTH_LONG).show()
                }

                override fun onResponse(call: Call<ItemsList>, response: Response<ItemsList>) {
                    if (response.isSuccessful) {
                        if (context != null) {
                            Toast.makeText(context, response.toString(), Toast.LENGTH_SHORT)
                                .show()
                        }
                        response.body()?.getitemsArrayList()?.let { generateItemsList(it) }
                    }
                    Log.i(TAG, response.body().toString())
                }

            })
        }
    }
}

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

fun listSplit(listOfEanItems: ArrayList<String?>) {
    var newList = listOfEanItems.chunked(6)
}
...