我正在尝试使用OKhttp库将JSON数据发送到服务器,并且难以确定正确的语法。尝试了此帖子okhttp3 RequestBody in Kotlin中提供的解决方案,到目前为止,该类已被弃用。
答案 0 :(得分:4)
为使上面给出的答案更加清楚,这是使用扩展功能的方法。
如果您使用的是com.squareup.okhttp3:okhttp:4.0.1
,则不建议使用创建 MediaType 和 RequestBody 对象的旧方法,并且不能在 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)
答案 1 :(得分:0)
您需要创建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()
答案 2 :(得分:0)
在依赖项中的 build.gradle 中,确保您正在使用
dependencies {
...
implementation "com.squareup.okhttp3:okhttp:4.0.1"
}
然后,进行同步,Android Studio IDE 将为您提供
import okhttp3.MediaType.Companion.toMediaType
之后你就可以
val contentType = "application/json".toMediaType()