日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android Kotlin协程和Retrofit结合使用

發布時間:2024/9/30 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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结合使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。