Kotlin/Android中执行HTTP请求

如何在Kotlin/Android中执行简单的HTTP请求

okhttp官网
okhttp3 github地址

打开build.gradle.kts文件加入依赖

复制代码
dependencies {
    implementation("com.squareup.okhttp3:okhttp:4.9.0")
}

在IDEA的Gradle面板点击reload按钮便会自动下载jar


为了方便使用可以对okhttp3进行封装一下

MainActivity.kt代码如下

复制代码
package com.demo.composestudy

import android.content.ContentValues.TAG
import android.os.Bundle
import android.util.Log
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.Button
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextAlign

import okhttp3.Call
import okhttp3.Callback
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.Response

import java.io.IOException



class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            showUI()
        }

    }
}



@Composable
fun showUI(){
    var resultstring by remember { mutableStateOf("") }

    Column(){
        Button(
            onClick = {
                var url = "https://www.baidu.com";

                val client = OkHttpClient();


                // 创建一个Request对象
                var request: Request = Request.Builder()
                    .url(url)
                    .build();

                //发起call请求
                val call: Call = client.newCall(request)

                //异步请求
                call.enqueue(object : Callback {
                    override fun onFailure(call: Call, e: IOException) {
                        Log.d(TAG, "onFailure IOException:{$e}");
                    }
                    override fun onResponse(call: Call, response: Response) {
                        //接收返回响应
                        val result = response.body?.string()?:"";

                        resultstring = result;

                        Log.d(TAG, "result:{$result}");
                    }
                });

        }){
        Text("点击进行请求")
    }

    Text(
        "$resultstring",
        Modifier.fillMaxWidth(),
        textAlign = TextAlign.Center,
        style = MaterialTheme.typography.titleMedium
    )

}

}

这里需要使用异步请求,使用同步请求会阻塞Android的UI线程

相关推荐
传奇开心果编程6 小时前
从替代到粒度:Compose Multiplatform 的决策模式重构已开启跨平台新时代
kotlin·移动开发·跨平台·cmp·编程语言理论·编程框架·声明式ui
小成202303202658 小时前
C++~07补充
开发语言·c++
三少爷的鞋8 小时前
Kotlin 协程,重点就在「协」这个字上
android·kotlin
好的佩奇9 小时前
Dart 之模式
android·flutter·dart
淡淡的香烟11 小时前
Flutter实现多语言切换
android·flutter·1024程序员节
2401_8858850411 小时前
国际语音C#接口怎么写?.NET环境下实现国际语音验证码批量下发
开发语言·c#·.net
程序猿乐锅11 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
Wang's Blog11 小时前
Java 项目实战: 交友项目 - 查询圈子个人动态:查询我的动态需求分析
java·开发语言·交友
凯瑟琳.奥古斯特12 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展