Okhttp3 - RequestBody.create(contentType, content) Deprecated

2022-08-31 10:07:07

我没有找到任何如何替换弃用方法的示例。okhttp3 主页上的示例是旧的。这是其中之一:

public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");

OkHttpClient client = new OkHttpClient();

String post(String url, String json) throws IOException {
    RequestBody body = RequestBody.create(JSON, json);
      Request request = new Request.Builder()
          .url(url)
          .post(body)
          .build();
  try (Response response = client.newCall(request).execute()) {
    return response.body().string();
  }
}

如果有人能解决这个问题,我将不胜感激。

更新:我正在使用'com.squareup.okhttp3:okhttp:4.0.1'


答案 1

Java解决方案:例如,使用代替create(String, MediaType)create(MediaType, String)

Kotlin 解决方案:使用扩展功能;对于文件类型content.toRequestBody(contentType)file.asRequestBody(contentType)

注意:我正在使用kotlin,但我的IDE只是没有自动导入类或方法,所以我手动导入它...然后用它作为下面Saeed YounusPratyesh给出的例子import okhttp3.RequestBody.Companion.toRequestBody

欲了解更多信息:文档

(在 Android Studio 或任何 Jetbrain 的 IDE 中,只需按住 Ctrl 并单击create(...)RequestBody.create)


答案 2

In com.squareup.okhttp3:okhttp:4.1.0

MediaType.get("application/json; charset=utf-8")不再可用。

相反,我们需要使用。"application/json; charset=utf-8".toMediaTypeOrNull()

例如,我们现在需要如何创建请求正文,因为okhttp:4.1.0

import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.toRequestBody

    val jsonObject = JSONObject()
        jsonObject.put("name", "Ancd test")
        jsonObject.put("city", "delhi")
        jsonObject.put("age", "23")
    val body = jsonObject.toString().toRequestBody("application/json; charset=utf-8".toMediaTypeOrNull())

对于那些想知道答案来自哪里的人!

所有备选方案/解决方案(如答案所述)都记录在相应的弃用代码中!只需使用您的IDE支持的任何含义来操纵它(已弃用的代码)。例如,要在使用AndroidStudio或任何Jetbrain的IDE时查看已弃用代码的替代/解决方案,只需长按并将鼠标悬停在上,然后在成功悬停时单击它RequestBody.create(...,...)CtrlRequestBody.create(...,...)


推荐