使用Kotlin使用OkHttp发送JSON数据

时间:2019-07-18 11:30:45

标签: java json kotlin okhttp3

我正在尝试使用OKhttp库将JSON数据发送到服务器,并且难以确定正确的语法。尝试了此帖子okhttp3 RequestBody in Kotlin中提供的解决方案,到目前为止,该类已被弃用。

Code

3 个答案:

答案 0 :(得分:4)

为使上面给出的答案更加清楚,这是使用扩展功能的方法。

如果您使用的是com.squareup.okhttp3:okhttp:4.0.1,则不建议使用创建 MediaType RequestBody 对象的旧方法,并且不能在 Kotlin中使用

em>。

如果要使用扩展功能从字符串中获取 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()