Jay*_*uja 3 java json kotlin okhttp3
我正在尝试使用 OKhttp 库将 JSON 数据发送到服务器,但无法为其找出正确的语法。尝试了这篇文章中提供的解决方案okhttp3 RequestBody in Kotlin该类目前已弃用。
您需要创建一个 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()
Run Code Online (Sandbox Code Playgroud)
为了更清楚地了解上面给出的答案,这是您可以使用扩展功能的方式。
如果您正在使用com.squareup.okhttp3:okhttp:4.0.1创建MediaType和RequestBody对象的旧方法,则已弃用并且不能在Kotlin 中使用。
如果您想使用扩展函数从字符串中获取MediaType对象和ResponseBody对象,请首先将以下行添加到您希望使用它们的类中。
import okhttp3.MediaType.Companion.toMediaType
import okhttp3.RequestBody.Companion.toRequestBody
Run Code Online (Sandbox Code Playgroud)
您现在可以通过这种方式直接获取MediaType的对象
val mediaType = "application/json; charset=utf-8".toMediaType()
Run Code Online (Sandbox Code Playgroud)
要获取RequestBody的对象,首先将要发送的 JSONObject 以这种方式转换为字符串。您必须将 mediaType 对象传递给它。
val requestBody = myJSONObject.toString().toRequestBody(mediaType)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4870 次 |
| 最近记录: |