Android Kotlin协程和Retrofit结合使用
生活随笔
收集整理的這篇文章主要介紹了
Android Kotlin协程和Retrofit结合使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請標明出處: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结合使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android 监听APP进入前台、后台
- 下一篇: Android Kotlin 协程asy