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

相关推荐
数据小爬虫@10 分钟前
如何高效利用Python爬虫按关键字搜索苏宁商品
开发语言·爬虫·python
ZJ_.12 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
Narutolxy17 分钟前
深入探讨 Go 中的高级表单验证与翻译:Gin 与 Validator 的实践之道20241223
开发语言·golang·gin
Hello.Reader25 分钟前
全面解析 Golang Gin 框架
开发语言·golang·gin
禁默35 分钟前
深入浅出:AWT的基本组件及其应用
java·开发语言·界面编程
Code哈哈笑1 小时前
【Java 学习】深度剖析Java多态:从向上转型到向下转型,解锁动态绑定的奥秘,让代码更优雅灵活
java·开发语言·学习
程序猿进阶1 小时前
深入解析 Spring WebFlux:原理与应用
java·开发语言·后端·spring·面试·架构·springboot
qq_433618441 小时前
shell 编程(二)
开发语言·bash·shell
charlie1145141911 小时前
C++ STL CookBook
开发语言·c++·stl·c++20
袁袁袁袁满1 小时前
100天精通Python(爬虫篇)——第113天:‌爬虫基础模块之urllib详细教程大全
开发语言·爬虫·python·网络爬虫·爬虫实战·urllib·urllib模块教程