Kotlin + MVVM + LiveData + Coroutines !

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学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》点击传送门,即可获取!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值