Итак, если я позвонил на www.abc.com/whatever и по какой-то причине этот вызов не удался, я хочу сделать последующие повторные попытки на www.abc-2.com/whatever. Проблема в том, что я использовал служебный метод для обертывания вызовов API вокруг логики try-catch и повтора. Выглядит это примерно так:
Код: Выделить всё
suspend fun safeApiCall(apiCall: suspend () -> Response): Result {
val maxRetries = 5
val retryCount = 0
while (retryCount < maxRetries) {
try {
val response = apiCall.invoke()
if (response.isSuccessful) {
return Result.success(response.body)
} else {
retryCount++
}
} catch(e: Exception) {
// do some logging
retryCount++
}
}
}
Код: Выделить всё
interface MyApiService {
@GET
suspend fun getApiData(
@Url completeUrl: String,
@QueryMap queries: Map,
@HeaderMap headerMap: Map = hashMapOf()
): Response
}
Код: Выделить всё
suspend fun getMyApiResponse(): Result {
return safeApiCall {
apiService.getApiData(
completeUrl = "www.abc.com/whatever",
queries = listOf(),
)
}
}
code> не содержит информации об объекте запроса. Я попытался изменить методы в своей службе API, чтобы они возвращали объекты вызова следующим образом:
Код: Выделить всё
interface MyApiService {
@GET
fun getApiData(
@Url completeUrl: String,
@QueryMap queries: Map,
@HeaderMap headerMap: Map = hashMapOf()
): Call
}
Есть ли какой-либо метод, с помощью которого я могу добиться переключения URL-адресов без особых изменений с помощью метода SafeApiCall. Я знаю, что мог бы использовать перехватчик, но тогда мне пришлось бы переместить в него всю логику, связанную с повтором, а перехватчики просто не кажутся правильным выбором для логики повтора.
Любая помощь будет очень ценю.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ng-retrofi
Мобильная версия