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"/>

    <application
        android: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.IOException

class 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的生成

相关推荐

  1. Okhttp 发送https请求,忽略ssl认证

    2024-07-23 06:38:03       27 阅读
  2. 深入理解通用HTTP POST请求发送方法

    2024-07-23 06:38:03       51 阅读
  3. okHttphttps请求忽略ssl证书认证

    2024-07-23 06:38:03       20 阅读
  4. RestTemplate发送https请求

    2024-07-23 06:38:03       50 阅读
  5. Linux发送HTTP请求

    2024-07-23 06:38:03       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 06:38:03       52 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 06:38:03       54 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 06:38:03       45 阅读
  4. Python语言-面向对象

    2024-07-23 06:38:03       55 阅读

热门阅读

  1. 寻访安康茶韵,共筑乡村振兴

    2024-07-23 06:38:03       15 阅读
  2. 什么是服务器带宽

    2024-07-23 06:38:03       13 阅读
  3. 在VS IDE中搜索所有带有中文的字符串

    2024-07-23 06:38:03       16 阅读
  4. Python面试整理-字符串处理

    2024-07-23 06:38:03       12 阅读
  5. SQL中的函数

    2024-07-23 06:38:03       16 阅读
  6. Logback 配置文件加载步骤

    2024-07-23 06:38:03       14 阅读
  7. Ubuntu 20.04搭建OpenCV 4.5.0 & C++环境

    2024-07-23 06:38:03       12 阅读
  8. 定制Mojo模型的魔法:特征转换的艺术

    2024-07-23 06:38:03       16 阅读
  9. 自定义预测逻辑:Mojo模型的高级应用

    2024-07-23 06:38:03       17 阅读
  10. Mojo模型动态批处理:智能预测的终极武器

    2024-07-23 06:38:03       16 阅读