协程有多么好用相比我们不需要再多赘述了,协程如何搭配旧版本的 Retrofit 使用相比大家也在网上看到过很多文章,大致如下:

//扩展 await() 函数private suspend fun <T> Call<T>.await(): T {return suspendCancellableCoroutine { continuation ->//await()的实质是调用 call的异步enqueueenqueue(object : Callback<T> {//请求失败override fun onFailure(call: Call<T>, t: Throwable) {if (continuation.isCancelled) return // ②  //如果协程已经取消了,无需继续抛出异常continuation.resumeWithException(t)}//请求成功override fun onResponse(call: Call<T>, response: Response<T>) {//1.3版本的新特性 使用 resumeWith(Result<T>)continuation.resumeWith(runCatching { // ①if (response.isSuccessful) {response.body()?: throw NullPointerException("Response body is null: $response")} else {throw HttpException(response)}})}})//当协程取消时的回调函数,协程取消  -  请求取消continuation.invokeOnCancellation {try {cancel()} catch (ex: Throwable) {  // ③//Ignore cancel exception//此时协程已经取消,请求取消是否存在异常已经没有影响了}}}}

即,定义一个 Call 的扩展函数 await,挂起当前协程,执行 Call 的 enqueue 函数,在成功回调中 resume 协程,在失败回调中抛出异常。

现在不需要这么麻烦啦,只要使用最新版本的 Retrofit 2.6+ 版本,天然支持协程,网络请求如同同步方法一样易于书写。

New: Support suspend modifier on functions for Kotlin! This allows you to express the asynchrony of HTTP requests in an idiomatic fashion for the language.

@GET("users/{id}")
suspend fun user(@Path("id") id: Long): User

Behind the scenes this behaves as if defined as fun user(…): Call and then invoked with Call.enqueue. You can also return Response for access to the response metadata.

现在你只需要在你的网络请求方法前添加 suspend 修饰符,即可畅享协程带来的便利。在幕后实现方式与上边我们提到的方式大同小异,返回值可以是反序列化后的对象,也可以是 Response < T > ,以方便我们访问响应元数据。

实战:

try {val response = ServiceCreator.create(PlaceService::class.java).login()tv_detail.text = response
} catch (e: Throwable) {e.printStackTrace()
}

整个网络请求看起来就像是在执行同步方法一样,更加简洁易读!

Kolin协程与Retrofit 2.6.1完美合璧相关推荐

  1. android studio放置在函数上面看_Android中用Kotlin协程和Retrofit进行网络请求和取消请求...

    前面两篇文章介绍了协程的一些基本概念和基本知识,这篇则介绍在Android中如何使用协程配合Retrofit发起网络请求,同时介绍在使用协程时如何优雅的取消已经发起的网络请求. 需要文章中demo完整 ...

  2. Android Kotlin协程和Retrofit结合使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118085035 本文出自[赵彦军的博客] 往期精彩文章: Kotlin实战指南二十 ...

  3. 大型Android项目架构:基于组件化+模块化+Kotlin+协程+Flow+Retrofit+Jetpack+MVVM架构实现WanAndroid客户端

    前言:苟有恒,何必三更眠五更起:最无益,莫过一日曝十日寒. 前言 之前一直想写个 WanAndroid 项目来巩固自己对 Kotlin+Jetpack+协程 等知识的学习,但是一直没有时间.这里重新行 ...

  4. Retrofit2+Kolin协程

    Retrofit2.6开始增加了对Kotlin协程的支持,可以通过suspend函数进行异步调用.本文简单介绍一下Retrofit中协程的使用 data class 首先定义一个data class ...

  5. kolin协程讲解不错的几篇博客

    暂时学习中找到自己需求的博客,如果有推荐可以留言 第一篇肯定是官网 Jacks Blog---->>>Kotlin Coroutines(协程)

  6. Android中使用Kotlin协程(Coroutines)和Retrofit进行网络请求(二)之文件下载

    写在前面 下载功能是非常常用的功能,今天我们要通过kotlin协程和retrofit来是实现文件下载的功能.retorfit本身可以将请求结果以InputStream的形式返回,拿到InputStre ...

  7. Android秀翻天的操作——使用协程进行网络请求

    文章目录 一.前言 二.Kotlin协程 三.协程和Retrofit 四.预备工作 1.准备好Retrofit 2.准备好协程 五.使用 六.小结 本文已独家授权 郭霖 ( guolin_blog) ...

  8. Kotlin协程 - - - 协程的简单使用

    一.协程介绍 1.简介 协程是一种并发设计模式,您可以在 Android 平台上使用它来简化异步执行的代码.协程是在版本 1.3 中添加到 Kotlin 的,它基于来自其他语言的既定概念. 在 And ...

  9. 串行和并行的区别_入门参考:从Go中的协程理解串行和并行

    本文转自公众号语言随笔,欢迎关注 入门参考:从Go中的协程理解串行和并行​mp.weixin.qq.com Go语言的设计亮点之一就是原生实现了协程,并优化了协程的使用方式.使得用Go来处理高并发问题 ...

最新文章

  1. Swift基础--调用第三方OC项目
  2. ARKit从入门到精通(11)-ARKit开发常见问题及解决方案
  3. 信息传递服务器,AJAX的与服务器之间的信息传递原理(初学)
  4. Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
  5. android checkBox背景样式及用颜色值实现button点击效果
  6. 简单干净的C#方法设计案例:SFCUI.AjaxValue()之一
  7. 之江天枢正式开源!一文详解天枢核心优势
  8. ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用
  9. 加权最小二乘(wls)滤波算法原理及实现
  10. ENVI入门系列教程---二、图像分析---9.遥感图像监督分类
  11. Linux_ppc下软件包安装,LINUX2000PPC安装手册
  12. safri 对于display:block;的元素显示不出来 其他所有浏览器均正常
  13. 如何在被保护的工作表(Worksheet)中使用Group Outlining
  14. 微信里iphone后退不刷新问题解决方案,真实有效
  15. (纪中)2223. 母鸡下蛋(hen)
  16. ArcGIS使用(一)创建ArcGIS应用
  17. 前端发起请求,后端响应请求的整个过程
  18. java将多个文件转成压缩包下载
  19. 前端学习-VUE框架
  20. 数学建模微分方程导弹问题matlab求解,数学建模之微分方程(符实现例题和MATLAB源码)...

热门文章

  1. e820/efi 内存表
  2. 递归(汉诺塔和递归求和)
  3. 你不努力,谁也给不了你想要的生活
  4. phpstudy搭建服务器【外网访问】
  5. ios技术分享| iOS 发布 framework 到 Cocoapods 以及常见问题
  6. 细数百度公司的知名开源项目
  7. 幸福婚礼策划PPT模板
  8. linux系统kafka常用命令
  9. Java序列化的状态
  10. 3DMarkVantage 解析