Ответ
В Android асинхронные запросы обычно завершаются через колбэки, корутины или RxJava:
- Колбэки (Retrofit, Volley):
api.getData().enqueue(object : Callback<Data> {
override fun onResponse(call: Call<Data>, response: Response<Data>) {
// Успешный ответ
}
override fun onFailure(call: Call<Data>, t: Throwable) {
// Ошибка
}
})
- Корутины (с suspend функциями):
viewModelScope.launch {
try {
val data = api.getData() // suspend функция
// Обработка данных
} catch (e: Exception) {
// Обработка ошибки
}
}
- RxJava:
api.getData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ data ->
// Успех
}, { error ->
// Ошибка
})
Завершение может быть успешным (с данными) или с ошибкой. Важно всегда обрабатывать оба сценария и освобождать ресурсы.