在 Android 开发中,使用 OkHttp 发送 POST 请求时,许多开发者误以为可以直接传递字符串,结果发现编译失败。实际上,只需调用一行 .toRequestBody() 就能轻松构建纯文本请求体,完全无需使用复杂的 FormBody 或 MultipartBody 构造器。
OkHttp 对纯文本请求体提供了完善的支持,但有一个关键要点:不能直接将字符串传入 .post() 方法,需要先将字符串转换为 RequestBody 对象,并明确指定 MIME 类型和字符编码。对应的工具是 Kotlin 的 String.toRequestBody() 扩展函数,或 Java 的 RequestBody.create() 方法。
✅ 正确写法(Kotlin)
val myBody = "my own body text that my server understands"
val mediaType = "text/plain; charset=utf-8".toMediaType() // 必须声明 charset,否则服务器可能解析乱码
val request = Request.Builder()
.url("https://your-api.com/endpoint")
.post(myBody.toRequestBody(mediaType)) // ✅ 核心:转为 RequestBody
.build()
okHttpClient.newCall(request).enqueue(object : Callback {
override fun onFailure(call: Call, e: IOException) {
// 处理网络异常
}
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful) {
println("Response: ${response.body?.string()}")
} else {
println("HTTP Error: ${response.code}")
}
}
})
