Discuz! BBS

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 50|回复: 0

okHttp post 的使用方法

[复制链接]

313

主题

449

帖子

2824

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2824
发表于 2025-6-25 11:12:15 | 显示全部楼层 |阅读模式
OkHttp 是一个流行的 HTTP 客户端库,用于在 Android 和 Java 应用中发送和接收网络请求。下面是一个使用 OkHttp 发送 POST 请求的示例。
首先,确保你的项目中包含了 OkHttp 的依赖。在你的 build.gradle 文件中添加以下依赖:
  1. dependencies {
  2.     implementation 'com.squareup.okhttp3:okhttp:4.9.3' // 请检查并使用最新版本
  3. }
复制代码
然后,你可以使用以下代码来发送一个 POST 请求:
  1. import okhttp3.*
  2. import java.io.IOException

  3. fun main() {
  4.     // 创建 OkHttpClient 实例
  5.     val client = OkHttpClient()

  6.     // 创建请求体(这里是一个简单的 JSON 字符串,实际应用中可能是一个更复杂的对象)
  7.     val json = """
  8.         {
  9.             "username": "exampleUser",
  10.             "password": "examplePass"
  11.         }
  12.     """.trimIndent()

  13.     val body = RequestBody.create(
  14.         mediaType("application/json; charset=utf-8"), json
  15.     )

  16.     // 构建请求对象
  17.     val request = Request.Builder()
  18.         .url("https://example.com/api/login") // 替换为你的目标 URL
  19.         .post(body) // 使用 POST 方法并设置请求体
  20.         .build()

  21.     // 发送请求并获取响应
  22.     client.newCall(request).enqueue(object : Callback {
  23.         override fun onFailure(call: Call, e: IOException) {
  24.             // 请求失败时回调此方法
  25.             e.printStackTrace()
  26.         }

  27.         override fun onResponse(call: Call, response: Response) {
  28.             // 请求成功时回调此方法
  29.             if (response.isSuccessful) {
  30.                 // 打印响应体
  31.                 println(response.body?.string())
  32.             } else {
  33.                 // 处理不成功的响应
  34.                 println("Response code: ${response.code}")
  35.                 println("Response message: ${response.message}")
  36.             }

  37.             // 注意:response.body?.string() 只能调用一次,因为它会消耗响应体。
  38.             // 如果你需要多次访问响应体,应该先将其保存到变量中。
  39.         }
  40.     })

  41.     // 注意:上面的代码是异步执行的。enqueue 方法会将请求添加到调度队列中,
  42.     // 并在后台线程中执行。当响应可用时,onResponse 或 onFailure 方法会被调用。
  43.     // 如果你需要同步执行请求,可以使用 execute 方法,但这应该在非主线程中进行,
  44.     // 因为它会阻塞当前线程直到响应返回。
  45. }

  46. // 辅助函数,用于创建 MediaType 对象
  47. fun mediaType(type: String): MediaType {
  48.     return MediaType.parse(type) ?: MediaType.get("application/octet-stream")
  49. }
复制代码
在上面的代码中,我们首先创建了一个 OkHttpClient 实例。然后,我们构建了一个包含 JSON 数据的 RequestBody 对象。接着,我们使用 Request.Builder 来创建一个 Request 对象,设置 URL 和 POST 方法,并将请求体附加到请求上。最后,我们使用 client.newCall(request).enqueue(...) 方法异步发送请求,并在回调中处理响应。
请注意,上面的代码示例是在一个 Kotlin 控制台应用程序中运行的。如果你在 Android 应用中使用 OkHttp,你应该在适当的生命周期方法(如 onCreate)中发送请求,并确保在请求完成时更新 UI(通常是在 onResponse 回调中,但需要在主线程上进行)。此外,处理网络请求时,你应该考虑添加错误处理、重试逻辑和超时设置等。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|DiscuzX

GMT+8, 2025-7-7 12:55 , Processed in 0.015812 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表