class LoginRepository : BaseRepository() {
suspend fun login(userName: String, passWord: String): WanResponse {
return apiCall { WanRetrofitClient.service.login(userName, passWord).await() }
}
}
LoginRepository
中定义具体的登录逻辑,通过 Retrofit
调用登录接口,返回 WanResponse<User>
。注意,要在协程中使用,所以定义为 suspend
方法。
ViewModel
class LoginViewModel : BaseViewModel() {
val mLoginUser: MutableLiveData = MutableLiveData()
val errMsg: MutableLiveData = MutableLiveData()
private val repository by lazy { LoginRepository() }
fun login(userName: String, passWord: String) {
launch {
val response = withContext(Dispatchers.IO) { repository.login(userName, passWord) }
executeResponse(response, { mLoginUser.value = response.data }, { errMsg.value = response.errorMsg })
}
}
}
LoginViewModel
持有 LoginRepository
,并通过它执行具体登录逻辑,这一块使用协程执行。返回结果通过 executeResponse()
方法处理,这是我自己封装的方法:
suspend fun executeResponse(response: WanResponse, successBlock: suspend CoroutineScope.() -> Unit,
errorBlock: suspend CoroutineScope.() -> Unit) {
coroutineScope {
if (response.errorCode == -1) errorBlock()
else successBlock()
}
}
Kotlin 的一些函数式编程语言特性会给我们的开发带来一些便利。executeResponse()
提供了统一的响应错误处理。
View
mViewModel.apply {
mLoginUser.observe(this@LoginActivity, Observer {
dismissProgressDialog()
startActivity(MainNormalActivity::class.java)
finish()
})
errMsg.observe(this@LoginActivity, Observer {
dismissProgressDialog()
it?.run { toast(it) }
})
}
最后就是 LoginActivity
代表的 View 层了,View 层和 ViewModel 层通过 LiveData 进行绑定,上面代码中的 mLoginUser
和 errMsg
就是 ViewModel 层 “发射” 过来的数据。关于数据绑定,我并没有使用 DataBinding
,这个纯粹是个人喜好了,我只是不喜欢 DataBinding 带来的代码不易读。
相对 Mvp 繁多的接口来说,个人感觉 Mvvm 的数据流更加清晰。搭配 Kotlin 和协程的使用,进一步简化代码。下面是一些项目截图:
最后
希望本文对你有所启发,有任何面试上的建议也欢迎留言分享给大家。
好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。
好了~如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
为什么某些人会一直比你优秀,是因为他本身就很优秀还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
还一直在持续努力变得更优秀,而你是不是还在满足于现状内心在窃喜!希望读到这的您能点个小赞和关注下我,以后还会更新技术干货,谢谢您的支持!
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!