8
آموزش کاتلین در اندروید
شبکه و API با Coroutine
اپی که API نزنه، مثل گوشی بدون اینترنت فقط چراغقوهست.
درس 8 از 12
Repository برای دیتای بیرون
به جای اینکه مستقیم از UI بروی API بزنی، یک Repository میسازی. Repository نقش واسطه را دارد: دیتا را از شبکه یا دیتابیس میگیرد و تمیز تحویل ViewModel میدهد.
نکته کاربردی: این جداسازی باعث میشود کدت تستپذیر و قابل تغییر باشد؛ فردا API عوض شد، همه صفحهها را شخم نمیزنی.
نمونه فراخوانی async
ViewModel با loading
class UsersViewModel : ViewModel() {
var state by mutableStateOf("idle")
private set
fun loadUsers() {
viewModelScope.launch {
state = "loading"
delay(700) // جای API واقعی
state = "loaded: 3 users"
}
}
}
خروجی یا نتیجه اجرا
ابتدا state برابر loading میشود، بعد از ۷۰۰ میلیثانیه loaded: 3 users میشود.
نکته کاربردی: Coroutine باعث میشود عملیات زمانبر UI را فریز نکند. کاربر نباید بابت کندی اینترنت تاوان عصبی بدهد.
نتیجه این درس 🎯
فهمیدی API باید async مدیریت شود و بهتر است Repository و ViewModel وسط کار باشند. قدم بعدی دیتای محلی است.
تمرین! 🧠
یک تابع loadProducts بنویس که loading شود، delay داشته باشد و بعد loaded بنویسد.
جواب تمرین
fun loadProducts() {
viewModelScope.launch {
state = "loading"
delay(500)
state = "loaded: products"
}
}خروجی جواب
loading → loaded: products