android——ktor封装

ktor封装

代码如下:

Kotlin 复制代码
object KtorClient {
//    private const val BASE_URL = "http://***.**.***.62:8002"
    private const val BASE_URL = "https://mock.***.cn"

    val client = HttpClient(CIO) {
        install(ContentNegotiation) {
            json(Json {
                prettyPrint = true
                isLenient = true
            })
        }

        install(HttpTimeout) {
            requestTimeoutMillis = 10000
        }
        install(Logging) {
            logger = Logger.DEFAULT
            level = LogLevel.NONE
        }
        install(DefaultRequest) {
            url(BASE_URL)
        }
//        install(HttpRequestRetry) {
//            maxRetries = 1
//            retryIf { request, response ->
//                response.status.value in listOf(408, 429, 500, 502, 503)
//            }
//            retryOnExceptionIf { _, exception ->
//                exception is SocketTimeoutException || exception is ConnectException || exception is UnresolvedAddressException
//            }
//            delayMillis { retry ->
//                retry * 3000L
//            }
//        }
    }

    fun close() {
        client.close()
    }

    inline fun <reified T> get(url: String, params: Map<String, String> = emptyMap()): Flow<T> {
        return flow {
            val response = client.get(url) {
                params.forEach { parameter(it.key, it.value) }
            }
            val result = response.body<T>()
            emit(result)
        }.catch { throwable: Throwable ->
            throw throwable
        }.onCompletion { cause ->
            close()
        }.flowOn(Dispatchers.IO)
    }

    inline fun <reified T> post(url: String, params: Map<String, String> = emptyMap()): Flow<T> {
        return flow {
            val response = client.post(url) {
                params.forEach { parameter(it.key, it.value) }
            }
            val result = response.body<T>()
            emit(result)
        }.catch { throwable: Throwable ->
            throw throwable
        }.onCompletion { cause ->
            close()
        }.flowOn(Dispatchers.IO)
    }
}

请求:

Kotlin 复制代码
Log.e("TAG", "111开始请求网络")
                KtorClient.get<BaseResponse<List<String>>>(
                    "m1/****/api/user",
                    hashMapOf("id" to "1")
                ).collect {
                    Log.e("TAG", "请求结果=》$it")
                }

依赖引入:

Kotlin 复制代码
/**************************/
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0' // lifecycleScope
    def ktor_version = "2.3.1"
    implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.4.1'
    //observe livedata as state
    implementation 'androidx.compose.runtime:runtime-livedata:1.2.0-alpha07'
    //google sign in
    implementation 'com.google.android.gms:play-services-auth:20.1.0'
    //ktor
    implementation "io.ktor:ktor-client-auth:$ktor_version"
    implementation "io.ktor:ktor-client-core:$ktor_version"
    implementation "io.ktor:ktor-client-logging:$ktor_version"
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")
    implementation("io.ktor:ktor-client-cio:$ktor_version")
    implementation("io.ktor:ktor-client-content-negotiation:$ktor_version")
    implementation "ch.qos.logback:logback-classic:1.2.10"

//    implementation("io.ktor:ktor-client-features:$ktor_version")
    /******************************/
相关推荐
2501_915909063 小时前
如何保护 iOS IPA 文件中资源与文件的安全,图片、JSON重命名
android·ios·小程序·uni-app·json·iphone·webview
Root_Hacker5 小时前
include文件包含个人笔记及c底层调试
android·linux·服务器·c语言·笔记·安全·php
stevenzqzq5 小时前
android flow的背压策略
android·flow
stevenzqzq7 小时前
android mvi接口设计1
android·mvi接口设计
stevenzqzq7 小时前
android mvi接口设计2
android·mvi接口设计
2501_915909069 小时前
原生与 H5 共存情况下的测试思路,混合开发 App 的实际测试场景
android·ios·小程序·https·uni-app·iphone·webview
鸣弦artha9 小时前
Flutter框架跨平台鸿蒙开发——Extension扩展方法
android·javascript·flutter
小陈phd10 小时前
langGraph从入门到精通(六)——基于 LangGraph 实现结构化输出与智能 Router 路由代理
android·网络·数据库
游戏开发爱好者810 小时前
了解 Xcode 在 iOS 开发中的作用和功能有哪些
android·ios·小程序·https·uni-app·iphone·webview
_昨日重现11 小时前
Jetpack系列之Compose TopBar
android·android jetpack