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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

kotlin 用协程做网络请求_Android使用Kotlin协程封装网络库

發(fā)布時間:2025/4/5 Android 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kotlin 用协程做网络请求_Android使用Kotlin协程封装网络库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

概述

最近又要替換網(wǎng)絡(luò)庫成了,導(dǎo)致所有的業(yè)務(wù)代碼都要替換且要重新測試回歸。為了防止后續(xù)再遇到這樣事情,降低替換核心庫的成本,現(xiàn)利用協(xié)程對網(wǎng)絡(luò)庫進行封裝。

理想API調(diào)用方式

launch {

val response = TestReq(q = "電腦").request()

Toast.makeText(this, response?.result?.toString()?:"網(wǎng)絡(luò)異常", Toast.LENGTH_SHORT).show()

}

請求定義

@URL("https://suggest.taobao.com/sug")

@GET

data class TestReq(var code: String = "utf-8", val q: String) : IReq

class TestResponse {

var result: List? = null

}

說明

launch是對Context的類擴展,對于Activity而言可以在銷毀的時候關(guān)閉協(xié)程;其他場景可以自己管理協(xié)程。例如:

import kotlinx.coroutines.launch

class MainActivity : AppCompatActivity() , CoroutineScope by MainScope() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

launch {

val response = TestReq(q = "電腦").request()

Toast.makeText([email?protected], response?.result?.toString()?:"網(wǎng)絡(luò)異常", Toast.LENGTH_SHORT).show()

}

}

override fun onDestroy() {

super.onDestroy()

cancel()

}

}

使用

引用

implementation 'com.zhangzheng.easyhttp:library:1.0.1'

初始化

默認(rèn)(HttpUrlConnection)

EasyHttp.init(DefaultAdapter(GsonJsonParse()))

implementation 'com.google.code.gson:gson:2.8.6'

OkHttp

EasyHttp.init(OKHttpAdapter(GsonJsonParse()))

implementation 'com.squareup.okhttp3:okhttp:3.8.0'

implementation 'com.squareup.okio:okio:1.12.0'

implementation 'com.google.code.gson:gson:2.8.6'

Vollery

EasyHttp.init(VolleyAdapter(this,GsonJsonParse()))

implementation 'com.android.volley:volley:1.1.1'

implementation 'com.google.code.gson:gson:2.8.6'

如果使用的是FastJson可以替換解析器

GsonJsonParse() --> FastJsonParse()

implementation 'com.alibaba:fastjson:1.2.37'

如果協(xié)程不可用,檢查協(xié)程庫是否引入了

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1"

implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1"

自定義擴展

自己擴展可以實現(xiàn)EasyHttp.IAdapter,對于后續(xù)替換網(wǎng)絡(luò)請求核心庫只需要開發(fā)適配器就可以了。對于json解析可以實現(xiàn)IResponseParse來擴展。示例如下:

IAdapter

class OKHttpAdapter(var parse: IResponseParse) : EasyHttp.IAdapter {

override suspend fun request(url: String, params: Map, isGet: Boolean): String {

val okHttpClient = OkHttpClient()

val formBody = FormBody.Builder()

params.forEach {

formBody.add(it.key,it.value)

}

val request: Request =if(isGet){

Request.Builder().url(url.urlWithParam(params)).method("GET", null)

}else{

Request.Builder().url(url).method("POST", createParamBody(params))

}.build()

val call: Call = okHttpClient.newCall(request)

return call.execute().body()?.string()?:""

}

override fun parse(value: String, clazz: Class)=parse.parse(value,clazz)

private fun createParamBody(params: Map):FormBody{

val formBody = FormBody.Builder()

params.forEach {

formBody.add(it.key,it.value)

}

return formBody.build()

}

}

IResponseParse

class FastJsonParse :IResponseParse{

override fun parse(value: String, clazz: Class)=JSON.parseObject(value,clazz)

}

github地址:

總結(jié)

以上是生活随笔為你收集整理的kotlin 用协程做网络请求_Android使用Kotlin协程封装网络库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。