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")
    /******************************/
相关推荐
巫山老妖9 小时前
Android 应用架构演进:MVC / MVP / MVVM / MVI (2026)
android·android jetpack
木头左13 小时前
【架构设计】教育类 App 服务端化改造:AI 上移、题库分层与个人题库归属
android·架构设计·系统设计·后端开发·数据库设计
墨狂之逸才14 小时前
USB 的 HOST 和 DEVICE 到底有什么区别?ADB 调试应该选哪个?
android
奶油话梅糖15 小时前
苹果的内核跑上了安卓手机:2,631 Star 的 HakiOS 让 XNU 在 Adreno GPU 上画出 118 帧
android·macos·智能手机
恋猫de小郭15 小时前
Flutter THLC 的 WebView 滚动终于从 70 FPS 提升到 120 FPS
android·前端·flutter
好的佩奇1 天前
Dart 之扩展类型
android·flutter·dart
alexhilton1 天前
2027 Android 开发者路线图:学习、面试与 AI
android·kotlin·android jetpack
灿飞屋1 天前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
疯华整猫1 天前
我用 Trae 把 Android 内存账重算了一遍
android·性能优化·源码
TimeFine1 天前
AI 编程工作流的设计:从人工判断到 AI裁判
android·ai编程