Java 使用OkHttp和Kotlin发送JSON数据

Java 使用OkHttp和Kotlin发送JSON数据,java,json,kotlin,okhttp3,Java,Json,Kotlin,Okhttp3,我试图使用OKhttp库将JSON数据发送到服务器,但在为它找出正确的语法时遇到了困难。尝试了本文中提供的解决方案,目前该类已被弃用 您需要创建类型为okhttp3.Request.Builder的对象,并通过post方法添加okhttp3.RequestBody val okHttpClient: OkHttpClient = ... //val httpUrl = HttpUrl.parse("string url") ?: throw IllegalArgumentException("w

我试图使用OKhttp库将JSON数据发送到服务器,但在为它找出正确的语法时遇到了困难。尝试了本文中提供的解决方案,目前该类已被弃用


您需要创建类型为okhttp3.Request.Builder的对象,并通过post方法添加okhttp3.RequestBody

val okHttpClient: OkHttpClient = ...
//val httpUrl = HttpUrl.parse("string url") ?: throw IllegalArgumentException("wrong url $url")//3.12.1
val httpUrl = "string url".toHttpUrl()//4.0.1
val httpUrlBuilder = httpUrl.newBuilder()
val requestBuilder = Request.Builder().url(httpUrlBuilder.build())
//val mediaTypeJson = MediaType.parse("application/json; charset=utf-8") ?: throw IllegalArgumentException("wrong media type")//3.12.1
val mediaTypeJson = "application/json; charset=utf-8".toMediaType()//4.0.1
val jsonString = "{\"jsondata\":0}"
requestBuilder.post(
jsonString.toRequestBody(mediaTypeJson)//4.0.1
//RequestBody.create(mediaTypeJson, jsonString)//3.12.1
)
val call = okHttpClient.newCall(requestBuilder.build())
... = call.execute()

为了更清楚地了解上面给出的答案,以下是如何使用扩展函数

如果您使用的是
com.squareup.okhttp3:okhttp:4.0.1
则创建MediaTypeRequestBody对象的旧方法已被弃用,无法在Kotlin中使用

如果要使用扩展函数从字符串中获取MediaType对象和ResponseBody对象,请首先将以下行添加到要使用它们的类中

import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
现在,您可以通过这种方式直接获取MediaType的对象

val mediaType = "application/json; charset=utf-8".toMediaType()
要获取RequestBody的对象,首先将要发送的JSONObject转换为字符串。您必须将mediaType对象传递给它

val requestBody = myJSONObject.toString().toRequestBody(mediaType)

在build.gradle中在依赖项中,确保使用

dependencies {
    ...
    implementation "com.squareup.okhttp3:okhttp:4.0.1"
}
然后,进行同步,Android Studio IDE将为您提供

import okhttp3.MediaType.Companion.toMediaType
在这之后你就可以

val contentType = "application/json".toMediaType()

请发布您的代码,而不是图像,然后阅读,您可以检查这是否是解决此问题的方法。使用“parse(String):MediaType”时出现以下错误是一个错误。当然,您需要处理这样一个事实:parse方法可以返回
null
。更正了答案。requestBuilder.post(RequestBody.create(MediaType.parse(“application/json;charset=utf-8”)!!,“{\”jsondata\“:0}”)。给出了一个错误-使用“parse(String)”:MediaType?'是一个错误。移动到扩展函数您是否使用
实现'com.squareup.okhttp3:okhttp:3.12.1'
?我更新了答案。我正在使用实现“com.squareup.okhttp3:okhttp:4.0.1”我无法确定如何创建post方法中所需的RequestBody参数。如果“Companion”尝试使用此导入时是否已读取?