转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118085035
本文出自【赵彦军的博客】

往期精彩文章:
Kotlin实战指南二十:flow
Kotlin实战指南十六:Synchronized、Volatile
Android Coroutines Channels
Android Flow遇见Retrofit网络请求实践
Android Kotlin协程和Retrofit结合使用
Retrofit 注解参数详解

文章目录

  • Retrofit 正常使用
  • Retrofit结合协程方式一
  • Retrofit结合协程方式二
  • Retrofit结合协程方式三

先定义实体类

class Repo(val id: String, val name: String)

Retrofit 正常使用

定义接口 GitHubService

interface GitHubService {@GET("users/{user}/repos")fun listRepos(@Path("user") user: String?): Call<List<Repo>>
}

使用

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val retrofit = Retrofit.Builder().baseUrl("https://api.github.com/").addConverterFactory(GsonConverterFactory.create()).build()val service: GitHubService = retrofit.create(GitHubService::class.java)val call = service.listRepos("zyj1609wz")call.enqueue(object : Callback<List<Repo>> {override fun onResponse(call: Call<List<Repo>>, response: Response<List<Repo>>) {val list = response.body()tv.text = "ok ${list?.get(0)?.name}"}override fun onFailure(call: Call<List<Repo>>, t: Throwable) {tv.text = "fail ${t.message}"}})}
}

Retrofit结合协程方式一

下面我们来使用协程请求网络接口

定义接口 GitHubService

interface GitHubService {@GET("users/{user}/repos")fun listRepos(@Path("user") user: String?): Call<List<Repo>>
}

在协程里面请求网络

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val retrofit = Retrofit.Builder().baseUrl("https://api.github.com/").addConverterFactory(GsonConverterFactory.create()).build()val service: GitHubService = retrofit.create(GitHubService::class.java)GlobalScope.launch {try {val call = service.listRepos("zyj1609wz")val response = call.execute()val list = response.body()tv.text = "ok ${list?.get(0)?.name}"} catch (e: Exception) {tv.text = "fail ${e.message}"}}}
}

这样我们就完成了, 协程和retrofit 结合,这只是一个简单的运用,仅仅把协程当做线程来使用。

Retrofit结合协程方式二

GitHubService 函数改为挂起函数,并且把返回值从 Call 改为List

interface GitHubService {@GET("users/{user}/repos")suspend fun listRepos(@Path("user") user: String?): List<Repo>
}

使用

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val retrofit = Retrofit.Builder().baseUrl("https://api.github.com/").addConverterFactory(GsonConverterFactory.create()).build()val service: GitHubService = retrofit.create(GitHubService::class.java)GlobalScope.launch(Dispatchers.Main) {try {//这是一个挂起函数val list = service.listRepos("zyj1609wz")tv.text = "ok ${list?.get(0)?.name}"} catch (e: Exception) {tv.text = "fail ${e.message}"}}}}

Retrofit结合协程方式三

async 模拟两个并行任务

class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)val retrofit = Retrofit.Builder().baseUrl("https://api.github.com/").addConverterFactory(GsonConverterFactory.create()).build()val service: GitHubService = retrofit.create(GitHubService::class.java)GlobalScope.launch(Dispatchers.Main) {try {val list = async { service.listRepos("zyj1609wz") }val list2 = async { service.listRepos("zyj1609wz") }//两个请求是并行的val result1 = list.await()val result2 = list2.await()tv.text = "ok ${result1[0].name} ${result2[0].name}"} catch (e: Exception) {}}}
}

Android Kotlin协程和Retrofit结合使用相关推荐

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

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

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

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

  3. Android - kotlin 协程极简入门

    背景 协程的作用是解决并发,并发的常见场景是多线程. "并发"和"并行"经常弄混.下面是我的理解,当然我理解也不一定是对的 "并发"是宏观上 ...

  4. Android Kotlin + 协程 + Retrofit + MVVM优雅的实现网络请求(简洁!!!!)

    最近学习了Kotlin,感受就是好处太多了 欲罢不能,这其中协程这个特点处理异步非常不错,于是花了很长时间结合Retrofit封装了网络请求,感觉非常简洁好用.先看下调用方式 准备工作:Retrofi ...

  5. Android Kotlin 协程async

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/118093646 本文出自[赵彦军的博客] 往期精彩文章 Android Corou ...

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

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

  7. Android中使用Kotlin协程代替RxJava封装网络请求

    现在的Android项目普遍使用Retrofit+RxJava的组合实现网络接口请求与数据的展现.这一功能通过Kotlin语言的协程功能也可以很方便的实现. 相比较而言,RxJava功能过于强大,如果 ...

  8. 在 Android 开发中使用 Kotlin 协程 (一) -- 初识 Kotlin 协程

    前言 最近在研究 Kotlin 协程,发现功能真的超级强大,很有用,而且很好学,如果你正在或计划使用 Kotlin 开发 Android,那么 Kotlin 协程你一定不能错过! 协程是什么? 我们平 ...

  9. android 协程,Android 上的 Kotlin 协程

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

最新文章

  1. Win10下使用Debug
  2. 二叉查找树--java
  3. mysql 密码修改时间_Mysql修改密码的方法
  4. jQuery:掌握选择器
  5. asp.net添加自定义用户控件并传值
  6. 解决Rails找不到Javascript的错误
  7. Process Explorer
  8. Spark源码系列(一)spark-submit提交作业过程
  9. 为什么20的阶乘是负的Java_为什么 n 为20 阶乘为负数
  10. FFmpeg命令行工具学习(二):播放媒体文件的工具ffplay
  11. 离散傅里叶变换公式推导
  12. 【Redis】布隆过滤器
  13. ShaderJoy —— 用 Shader 绘制一只可爱的 “小挠斧” (详细版)【GLSL】
  14. P1827 [USACO3.4] 美国血统 American Heritage
  15. 非零基础自学Golang 第18章 HTTP编程(下) 18.2 HTTP服务端 18.2.2 启动HTTP服务器 18.2.3 启动HTTPS服务器
  16. 存储过程中的关键字--AS、GO的含义
  17. linux shell中'',和``的区别
  18. java-初识大前端Node.js、ES6、Npm、Babel、模块化规范、WebPack、Vue-element-admin本地安装问题及解决、Git安装及配置、uni-app
  19. 【内网安全】135端口的入侵与防御
  20. T 字头 大型国际新能源公司 急聘 待遇优厚

热门文章

  1. 科学计算机怎么算坐标,用科学计算器fx-5800算坐标怎么按
  2. 哪个相机可以拍gif动图_直接拍摄gif动图的手机app你见过吗
  3. python类中方法调用自己类的方法_python怎么调用类方法
  4. java语言编程基础_Java编程基础02——Java语言基础
  5. 深度学习和目标检测系列教程 1-300:什么是对象检测和常见的8 种基础目标检测算法
  6. 下一代对话系统中的关键技术(上篇)
  7. 北京/杭州 | 阿里巴巴达摩院自然语言智能生物医学团队招聘研究型实习生
  8. CVPR 2020 | 自适应聚合网络AANet:更高效的立体匹配
  9. Word Embedding News | 词嵌入新鲜事:COVID-19特刊
  10. 近期有哪些值得读的QA论文?| 专题论文解读