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线程

相关推荐
张晓~183399481211 分钟前
碰一碰发视频 系统源码 /PHP 语言开发方案
开发语言·线性代数·矩阵·aigc·php·音视频·文心一言
代码不停3 分钟前
Java前缀和算法题目练习
java·开发语言·算法
豆沙沙包?3 分钟前
2025年--Lc200- 414. 第三大的数(大根堆)--Java版
java·开发语言
vocal5 分钟前
【我的AOSP第一课】AOSP 下载、编译与运行
android
一念&9 分钟前
每日一个C语言知识:C 指针
c语言·开发语言
涤生z11 分钟前
list.
开发语言·数据结构·c++·学习·算法·list
xxxxxxllllllshi14 分钟前
Java中Elasticsearch完全指南:从零基础到实战应用
java·开发语言·elasticsearch·面试·职场和发展·jenkins
wu_jing_sheng028 分钟前
Python中使用HTTP 206状态码实现大文件下载的完整指南
开发语言·前端·python
Lei活在当下44 分钟前
【业务场景架构实战】8. 订单状态流转在 UI 端的呈现设计
android·设计模式·架构
励志不掉头发的内向程序员1 小时前
【Linux系列】掌控 Linux 的脉搏:深入理解进程控制
linux·运维·服务器·开发语言·学习