Junior — Middle
Jak zaimplementować wykonywanie zapytań sieciowych, korzystając z ViewModel w aplikacji?
sobes.tech AI
Odpowiedź od AI
Aby wykonać żądania sieciowe w aplikacji Android z użyciem ViewModel, zazwyczaj stosuje się architekturę MVVM oraz biblioteki takie jak Retrofit i Coroutines.
Główna idea:
- ViewModel zawiera logikę ładowania danych i zarządza stanem UI.
- Żądania sieciowe są wykonywane asynchronicznie, aby nie blokować głównego wątku.
- Wyniki żądania są przekazywane do widoku za pomocą LiveData lub StateFlow.
Przykład z użyciem Kotlin Coroutines i Retrofit:
class MyViewModel(private val repository: MyRepository) : ViewModel() {
private val _data = MutableLiveData<ResultType>()
val data: LiveData<ResultType> = _data
fun fetchData() {
viewModelScope.launch {
try {
val response = repository.getDataFromNetwork()
_data.value = response
} catch (e: Exception) {
// Obsługa błędów
}
}
}
}
class MyRepository(private val apiService: ApiService) {
suspend fun getDataFromNetwork(): ResultType {
return apiService.fetchData()
}
}
Tutaj viewModelScope automatycznie anuluje korutynę przy niszczeniu ViewModel, co zapobiega wyciekom pamięci. Podejście to zapewnia jasny podział odpowiedzialności i ułatwia testowanie.