ViewModel 是一种设计模式,用于管理 UI 相关的数据,并处理与数据源的通信。它主要用于 Android 开发,但也可以应用于其他平台。ViewModel 的主要优势在于它能够在配置更改(如屏幕旋转)时保持数据状态,从而避免数据丢失。
当需要在多个 UI 组件之间共享数据,并且希望在配置更改时保持数据状态时,ViewModel 是一个很好的选择。例如,在一个显示用户信息的应用中,可以使用 ViewModel 来管理用户数据。
以下是一个简单的示例,展示如何使用 ViewModel 和 Repository 从存储库获取数据:
class UserRepository(private val apiService: ApiService) {
suspend fun getUser(): User {
return apiService.getUser()
}
}
class UserViewModel(private val userRepository: UserRepository) : ViewModel() {
private val _user = MutableLiveData<User>()
val user: LiveData<User> get() = _user
fun fetchUser() {
viewModelScope.launch {
try {
val user = userRepository.getUser()
_user.value = user
} catch (e: Exception) {
// Handle error
}
}
}
}
class UserActivity : AppCompatActivity() {
private lateinit var viewModel: UserViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_user)
val apiService = Retrofit.Builder()
.baseUrl("https://api.example.com/")
.addConverterFactory(GsonConverterFactory.create())
.build()
.create(ApiService::class.java)
val userRepository = UserRepository(apiService)
viewModel = ViewModelProvider(this, object : ViewModelProvider.Factory {
override fun <T : ViewModel?> create(modelClass: Class<T>): T {
return UserViewModel(userRepository) as T
}
}).get(UserViewModel::class.java)
viewModel.user.observe(this, Observer { user ->
// Update UI with user data
})
viewModel.fetchUser()
}
}
viewModelScope
或 lifecycleScope
来确保协程在适当的时候取消。通过以上步骤,你可以有效地使用 ViewModel 从存储库获取数据,并在 UI 中展示这些数据。
领取专属 10元无门槛券
手把手带您无忧上云