Junior — Middle
Kaip įgyvendinti tinklo užklausų vykdymą naudojant ViewModel programoje?
sobes.tech AI
Atsakymas iš AI
Norint vykdyti tinklo užklausas Android programoje naudojant ViewModel, dažnai taikoma MVVM architektūra ir bibliotekos, tokios kaip Retrofit ir Coroutines.
Pagrindinė idėja:
- ViewModel turi duomenų įkėlimo logiką ir valdo UI būseną.
- Tinklo užklausos vykdomos asinchroniškai, kad neužblokuotų pagrindinio srauto.
- Užklausos rezultatai perduodami į View per LiveData arba StateFlow.
Pavyzdys naudojant Kotlin Coroutines ir 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) {
// Klaidų tvarkymas
}
}
}
}
class MyRepository(private val apiService: ApiService) {
suspend fun getDataFromNetwork(): ResultType {
return apiService.fetchData()
}
}
Čia viewModelScope automatiškai atšauks korutiną, kai bus sunaikintas ViewModel, taip išvengiant atminties nutekėjimų. Šis požiūris užtikrina aiškų atsakomybės pasidalijimą ir palengvina testavimą.