Ответ
Для сетевых запросов использую Retrofit + Kotlin Coroutines. Это современное и удобное решение:
interface ApiService {
@GET("posts")
suspend fun getPosts(): List<Post>
}
// ViewModel
class PostViewModel : ViewModel() {
private val api = RetrofitClient.apiService
val posts = MutableLiveData<List<Post>>()
val error = MutableLiveData<String>()
fun loadPosts() {
viewModelScope.launch {
try {
posts.value = api.getPosts()
} catch (e: Exception) {
error.value = e.message
}
}
}
}
Ключевые моменты:
- Retrofit для декларативного описания API
- Suspend функции для корутин
- Обработка ошибок в try-catch
- ViewModelScope для управления жизненным циклом
- LiveData для наблюдения за изменениями в UI
Для сложных случаев добавляю:
- Interceptors для логирования/авторизации
- Мост для обработки ошибок
- Пагинацию через Paging 3