Mat*_*ías 13 java okhttp okhttp3
我没有找到任何有关如何替换弃用方法的示例。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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以解决,请多多帮助。
更新:我正在使用'com.squareup.okhttp3:okhttp:4.0.1'
YuT*_*ang 34
Java解决方案:
使用create(String, MediaType)代替create(MediaType, String)例如
Kotlin解决方案:
使用扩展功能content.toRequestBody(contentType);对于文件类型file.asRequestBody(contentType)
注意:
我使用的是kotlin,但是我的IDE不会自动导入像import okhttp3.RequestBody.Companion.toRequestBody这样的类或方法,因此我手动将其导入...然后将其用作@Pratyesh给出的示例
有关更多信息:文档
(例如,在Android Studio中或任何Jetbrain的IDE,解决过时方法或类可以通过仅保持所找到的Ctrl键和点击create(...)的RequestBody.create)
Pra*_*esh 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())
Run Code Online (Sandbox Code Playgroud)
小智 7
你可以这样更新吗
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)
Run Code Online (Sandbox Code Playgroud)
到
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())
Run Code Online (Sandbox Code Playgroud)
从okhttp3的4.0.0版本开始不推荐使用。
该版本的文档说
@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)
Run Code Online (Sandbox Code Playgroud)
我没有尝试过,但是我相信您可以通过以下操作来做到这一点:
@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)
Run Code Online (Sandbox Code Playgroud)
更新:我尝试使用以下依赖项版本编译上面显示的文件,并且RequestBody.Companion.create(json, JSON)似乎不建议使用。
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您需要手动导入这些文件,这可能是android studio中的错误。不建议使用,但适用于Okhttp 4.2.2
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.asRequestBody
Run Code Online (Sandbox Code Playgroud)
并用作
val file = File("path")
file.asRequestBody("image/jpeg".toMediaTypeOrNull())
Run Code Online (Sandbox Code Playgroud)
刚刚快速浏览了文档。它显示已弃用,但文档中提供了替代方案。
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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5923 次 |
| 最近记录: |