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