当前位置: 首页 > news >正文

Jetpack Compose 通过 OkHttp 发送 HTTP 请求的示例

下面是一个使用 Kotlin 和 Jetpack Compose 来演示通过 OkHttp 发送 HTTP 请求的示例。这个示例包括在 Jetpack Compose 中发送一个 GET 请求和一个 POST 请求,并显示结果。

在这里插入图片描述

添加okhttp依赖

首先,在你的 build.gradle.kts 文件中添加必要的依赖:

dependencies {implementation("com.squareup.okhttp3:okhttp:4.10.0")//其他依赖
}

INTERNET 权限

你需要在 AndroidManifest.xml 文件中添加网络权限声明。请按照以下步骤操作:

  1. 打开 AndroidManifest.xml 文件。
  2. <manifest> 标签内添加 <uses-permission android:name="android.permission.INTERNET"/>

你的 AndroidManifest.xml 文件应该如下所示:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.yourapp"><uses-permission android:name="android.permission.INTERNET"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.YourApp"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

添加这个权限声明后,再次运行你的应用程序,它应该能够正常进行网络请求。

主程序代码

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.*
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaType
import okio.IOExceptionclass MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {MyApp()}}
}@Composable
fun MyApp() {var getResponse by remember { mutableStateOf("Loading...") }var postResponse by remember { mutableStateOf("Loading...") }LaunchedEffect(Unit) {getResponse = performGetRequest()postResponse = performPostRequest()}Column(modifier = Modifier.padding(16.dp)) {Text(text = "GET Response:", style = MaterialTheme.typography.bodyLarge)Spacer(modifier = Modifier.height(8.dp))Text(text = getResponse)Spacer(modifier = Modifier.height(16.dp))Text(text = "POST Response:", style = MaterialTheme.typography.bodyLarge)Spacer(modifier = Modifier.height(8.dp))Text(text = postResponse)}
}suspend fun performGetRequest(): String = withContext(Dispatchers.IO) {val client = OkHttpClient()val request = Request.Builder().url("https://jsonplaceholder.typicode.com/posts/1").build()client.newCall(request).execute().use { response ->if (!response.isSuccessful) throw IOException("Unexpected code $response")response.body?.string() ?: "No response body"}
}suspend fun performPostRequest(): String = withContext(Dispatchers.IO) {val client = OkHttpClient()val JSON = "application/json; charset=utf-8".toMediaType()val json = """{ "title": "foo", "body": "bar", "userId": 1 }"""val body = RequestBody.create(JSON, json)val request = Request.Builder().url("https://jsonplaceholder.typicode.com/posts").post(body).build()client.newCall(request).execute().use { response ->if (!response.isSuccessful) throw IOException("Unexpected code $response")response.body?.string() ?: "No response body"}
}@Preview(showBackground = true)
@Composable
fun DefaultPreview() {MyApp()
}

参考

某AI的生成

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • FTP传输的两种模式的技术原理和应用
  • vue3+element-plus 实现动态菜单和动态路由的渲染
  • 传神社区|数据集合集第7期|法律NLP数据集合集
  • 【芯智雲城】详解智能电机驱动在汽车中的应用
  • GUI界面开发之tkinter(二) 学习文本组件
  • k8s部署kafka集群
  • Navicat图形化管理工具安装教程
  • vue接入google map自定义marker教程
  • Microsoft 365 Office BusinessPro LTSC 2024 for Mac( 微软Office办公套件)
  • 学习Numpy的奇思妙想
  • 【深度学习】PyTorch框架(5):Transformer和多注意力机制
  • 流淌在机械键盘上的魔法 源自这颗芯片
  • 3.1、数据结构-线性表
  • Android 各个版本兼容型问题
  • 【Gin】深度解析:在Gin框架中优化应用程序流程的责任链设计模式(上)
  • avalon2.2的VM生成过程
  • leetcode388. Longest Absolute File Path
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Spring框架之我见(三)——IOC、AOP
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • WePY 在小程序性能调优上做出的探究
  • 大快搜索数据爬虫技术实例安装教学篇
  • 关于extract.autodesk.io的一些说明
  • 将回调地狱按在地上摩擦的Promise
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 浅谈web中前端模板引擎的使用
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​io --- 处理流的核心工具​
  • ​水经微图Web1.5.0版即将上线
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #、%和$符号在OGNL表达式中经常出现
  • (1)(1.13) SiK无线电高级配置(五)
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (4)STL算法之比较
  • (LLM) 很笨
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (三)Honghu Cloud云架构一定时调度平台
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)为什么要选择C++
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • (转)3D模板阴影原理
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .CSS-hover 的解释
  • .form文件_一篇文章学会文件上传
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .NET DataGridView数据绑定说明
  • .NET 解决重复提交问题
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET和.COM和.CN域名区别
  • .NET下ASPX编程的几个小问题
  • ::
  • @manytomany 保存后数据被删除_[Windows] 数据恢复软件RStudio v8.14.179675 便携特别版...