Android HttpUtil 类使用 OkHttp 发送 POST 请求并解析 JSON 数据 - Kotlin 代码示例
使用 OkHttp 发送 POST 请求并解析 JSON 数据 - Kotlin 代码示例
本示例演示了如何使用 Kotlin 语言编写 HttpUtil 类,利用 OkHttp 库发送 POST 请求,并将 JSON 数据作为请求体,最终接收并解析响应数据。代码包含详细注释,解释了每个步骤的功能。
package com.example.modeldone.util
import android.os.Handler
import okhttp3.*
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody
import org.json.JSONObject
import java.io.IOException
object HttpUtil {
val okHttpClient = OkHttpClient()
val handler = Handler()
val baseUrl = "http://119.3.168.89:8080"
fun doPostForResult(url: String, jsonObject: JSONObject, listener: OnResultListener) {
val data = jsonObject.toString()
val toMediaTypeOrNull = "application/json; charset=utf-8".toMediaTypeOrNull()
val toRequestBody = data.toRequestBody(toMediaTypeOrNull)
val build = Request.Builder()
.url(baseUrl + url)
.post(toRequestBody)
.build()
okHttpClient.newCall(build).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
// 处理请求失败的情况
}
override fun onResponse(call: Call, response: Response) {
val string = response.body!!.string()
handler.post { listener.OnResult(string) }
}
})
}
}
interface OnResultListener {
fun OnResult(data: String)
}
代码说明
-
创建 OkHttpClient 对象:
val okHttpClient = OkHttpClient()创建一个 OkHttpClient 实例,用于发送 HTTP 请求。
-
创建 Handler 对象:
val handler = Handler()创建一个 Handler 对象,用于在主线程更新 UI。
-
定义 baseUrl:
val baseUrl = "http://119.3.168.89:8080"定义 API 服务的根 URL。
-
doPostForResult 函数:
fun doPostForResult(url: String, jsonObject: JSONObject, listener: OnResultListener)定义一个函数,用于发送 POST 请求。val data = jsonObject.toString()将 JSONObject 转换为 JSON 字符串。val toMediaTypeOrNull = "application/json; charset=utf-8".toMediaTypeOrNull()设置请求体的媒体类型为 JSON。val toRequestBody = data.toRequestBody(toMediaTypeOrNull)将 JSON 字符串转换为 RequestBody。val build = Request.Builder()创建一个 Request.Builder 对象。.url(baseUrl + url)设置请求的 URL。.post(toRequestBody)设置请求方法为 POST,并将 RequestBody 添加到请求中。.build()构建请求对象。okHttpClient.newCall(build).enqueue(object : Callback { ... })使用 OkHttpClient 发送请求,并设置回调函数处理响应结果。- 在回调函数中,使用
response.body!!.string()获取响应数据。 - 使用 Handler 在主线程中更新 UI,并将数据传递给
OnResultListener接口的OnResult方法。
-
OnResultListener 接口:
interface OnResultListener { fun OnResult(data: String) }定义一个接口,用于接收响应数据并进行处理。
Dart 代码实现
使用 Dart 语言和 http 包实现类似功能的代码示例:
import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
class HttpUtil {
static final String baseUrl = "http://119.3.168.89:8080";
static Future<void> doPostForResult(String url,
Map<String, dynamic> jsonObject, OnResultListener listener) async {
final data = jsonEncode(jsonObject);
final response = await http.post(Uri.parse(baseUrl + url),
headers: {"Content-Type": "application/json; charset=utf-8"},
body: data);
if (response.statusCode == HttpStatus.ok) {
final string = response.body;
listener.onResult(string);
}
}
}
abstract class OnResultListener {
void onResult(String data);
}
代码说明
-
导入必要库:
import 'dart:convert';导入dart:convert库,用于 JSON 编码和解码。import 'dart:io';导入dart:io库,用于获取 HTTP 状态码。import 'package:http/http.dart' as http;导入http包,用于发送 HTTP 请求。
-
定义 baseUrl:
static final String baseUrl = "http://119.3.168.89:8080";定义 API 服务的根 URL。
-
doPostForResult 函数:
static Future<void> doPostForResult(String url, Map<String, dynamic> jsonObject, OnResultListener listener) async { ... }定义一个异步函数,用于发送 POST 请求。final data = jsonEncode(jsonObject);将 Map 转换为 JSON 字符串。final response = await http.post(Uri.parse(baseUrl + url), headers: {"Content-Type": "application/json; charset=utf-8"}, body: data);使用http.post发送 POST 请求,设置请求头和请求体。if (response.statusCode == HttpStatus.ok) { ... }判断响应状态码是否为 200 (OK)。final string = response.body;获取响应数据。listener.onResult(string);调用OnResultListener接口的onResult方法,将数据传递给监听器。
-
OnResultListener 接口:
abstract class OnResultListener { void onResult(String data); }定义一个抽象类,用于接收响应数据并进行处理。
总结
本文演示了使用 Kotlin 和 Dart 语言发送 POST 请求并解析 JSON 数据的示例代码。两种语言的实现方式各有优劣,选择合适的语言取决于项目的具体需求。
原文地址: https://www.cveoy.top/t/topic/oXh7 著作权归作者所有。请勿转载和采集!