注意这里使用的返回值是 Deferred<T> 对象,这就意味着使用的时候要通过 await 来获取返回值。那么如何让 Retrofit 直接返回 Deferred<T> 呢?使用的也是 JakeWharton 的开源库:

implementation ‘com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2’

在构建 Client 的时候添加上这个适配器:


.addCallAdapterFactory(CoroutineCallAdapterFactory.invoke())

然后给 LoginRepository 提供一个 suspend 方法:

suspend fun login(userName: String, passWord: String): WanResponse {
return apiCall { WanRetrofitClient.service.login(userName, passWord).await() }
}

这里使用 await 来获取 Deferred<T> 的返回值。

最后在 LoginViewModel 中是这样调用的:

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 })
}
}

launch() 方法做了简单的封装,感兴趣的同学可以到源码中看一下。

以上就是在 Retrofit 2.4.0 中使用协程的基本方式了,其实代码也很简洁。而 Retrofit 2.6.0 让这一切更加简单!就让我们一睹为快吧!

Retrofit 2.6.0 中协程的使用

Talking is cheap, show me the code ! 还是上面的登录接口,基于 Retrofit 2.6.0 来改造一下。

第一步,修改 Retrofit 依赖。

implementation ‘com.squareup.retrofit2:retrofit:2.6.0’

第二步,修改 WanService 中接口的定义。

@POST(“/user/login”)
suspend fun login(@Field(“username”) userName: String,

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

结尾

好了,今天的分享就到这里,如果你对在面试中遇到的问题,或者刚毕业及工作几年迷茫不知道该如何准备面试并突破现状提升自己,对于自己的未来还不够了解不知道给如何规划,可以来看看同行们都是如何突破现状,怎么学习的,来吸收他们的面试以及工作经验完善自己的之后的面试计划及职业规划。

这里放上一部分我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,在这里免费分享给大家,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

[外链图片转存中…(img-BbuBTWwZ-1711202036082)]

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐