我没有找到任何有关如何替换弃用方法的示例。 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'
答案 0 :(得分:42)
Java解决方案:
例如,使用create(String, MediaType)
代替create(MediaType, String)
科特琳解决方案:
使用扩展功能content.toRequestBody(contentType)
;
为文件类型file.asRequestBody(contentType)
注意:
我使用的是kotlin,但是我的IDE不会自动导入import okhttp3.RequestBody.Companion.toRequestBody
之类的类或方法,因此我手动将其导入...然后将其用作@Pratyesh
更多信息:文档
(在Android Studio或任何Jetbrain的IDE中,只需按住 Ctrl 并单击create(...)
的{{1}},即可找到不推荐使用的方法或类的解决方案)
答案 1 :(得分:11)
在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())
答案 2 :(得分:8)
您需要手动导入这些文件,这可能是android studio中的错误。不建议使用,但适用于Okhttp 4.2.2
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.asRequestBody
并用作
val file = File("path")
file.asRequestBody("image/jpeg".toMediaTypeOrNull())
答案 3 :(得分:1)
自version 4.0.0 of okhttp3起已弃用。
该版本的文档说
@JvmStatic
@Deprecated(
message = "Moved to extension function. Put the 'content' argument first to fix Java",
replaceWith = ReplaceWith(
expression = "content.toRequestBody(contentType)",
imports = ["okhttp3.RequestBody.Companion.toRequestBody"]
),
level = DeprecationLevel.WARNING)
fun create(contentType: MediaType?, content: String) = content.toRequestBody(contentType)
我还没有尝试过,但是我相信您应该做以下事情:
package com.example;
import java.io.IOException;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;
public class Test {
public static final MediaType JSON = MediaType.get("application/json; charset=utf-8");
OkHttpClient client = new OkHttpClient();
public static void main(String[] args) {
}
String post(String url, String json) throws IOException {
//RequestBody body = RequestBody.create(JSON, json);
RequestBody body = RequestBody.Companion.create(json, JSON);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
}
更新:我尝试使用以下依赖项版本来编译上面显示的文件,RequestBody.Companion.create(json, JSON)
似乎没有被弃用。
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.0.0</version>
</dependency>
答案 4 :(得分:0)
只是快速浏览了文档。读取已弃用,但是文档中提供了替代方法。
json.toRequestBody(contentType)应该可以解决这个问题。
以下是文档链接:
https://github.com/square/okhttp/blob/master/okhttp/src/main/java/okhttp3/RequestBody.kt
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.Companion.create(json, JSON)
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
return response.body().string();
}
}
答案 5 :(得分:0)
根据okhttp的确定4更新为官方文档的许多东西
RequestBody.create()升级到File.asRequestBody()
答案 6 :(得分:0)
你只需要翻转你的参数。
@kotlin.jvm.JvmStatic @kotlin.Deprecated public final fun create(contentType: okhttp3.MediaType?, file: java.io.File): okhttp3.RequestBody { }
@kotlin.jvm.JvmStatic @kotlin.Deprecated @kotlin.jvm.JvmOverloads public final fun create(contentType: okhttp3.MediaType?, content: kotlin.ByteArray, offset: kotlin.Int , byteCount: kotlin.Int): okhttp3.RequestBody {}
@kotlin.jvm.JvmStatic @kotlin.Deprecated public final fun create(contentType: okhttp3.MediaType?, content: kotlin.String): okhttp3.RequestBody {}
@kotlin.jvm.JvmStatic @kotlin.Deprecated public final fun create(contentType: okhttp3.MediaType?, content: okio.ByteString): okhttp3.RequestBody { }
答案 7 :(得分:0)
你可以这样更新吗
val apiRequest = RequestBody.create(MediaType.parse("text/plain;charset=utf-8"), "edit_group")
val tokenRequest = RequestBody.create(MediaType.parse("text/plain;charset=utf-8"), token)
val fileReqBody = RequestBody.create(MediaType.parse("image/*"), file)
到
val apiRequest = "edit_group".toRequestBody("text/plain;charset=utf-8".toMediaType())
val tokenRequest = token.toRequestBody("text/plain;charset=utf-8".toMediaType())
val file = File(path)
val fileReqBody = file.asRequestBody("image/*".toMediaType())
答案 8 :(得分:0)
只需更改ResponseBody.create(MediaType.parse("text/json"), plainBody.trim())
到ResponseBody.create(plainBody.trim(),MediaType.parse("text/json"))