Je n'ai trouvé aucun exemple de la façon de remplacer la méthode de dépréciation. Les exemples de la page principale okhttp3 sont anciens. C'est l'un d'eux:
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();
}
}
Si quelqu'un pouvait le résoudre, j'apprécierais votre aide.
Mise à jour: j'utilise 'com.squareup.okhttp3: okhttp: 4.0.1'
Solution Java: Utilisez create(String, MediaType)
au lieu de create(MediaType, String)
par exemple
Solution Kotlin: Utilisez la fonction d'extension content.toRequestBody(contentType)
; pour le type de fichier file.asRequestBody(contentType)
Note: J'utilise kotlin, mais mon IDE n'importe pas automatiquement la classe ou la méthode comme import okhttp3.RequestBody.Companion.toRequestBody
, Donc je l'importe manuellement ... puis utilisez-le comme exemple donné par @Pratyesh
Pour en savoir plus: La documentation
(Dans Android Studio ou n'importe quel IDE Jetbrain, la solution aux méthodes ou classes obsolètes peut être trouvée en maintenant simplement la Ctrl et en cliquant sur la fonction create(...)
de RequestBody.create
)
Dans com.squareup.okhttp3: okhttp: 4.1.0
MediaType.get("application/json; charset=utf-8")
plus disponible.
au lieu de cela, nous devons utiliser "application/json; charset=utf-8".toMediaTypeOrNull()
.
Par exemple, comment nous devons créer le corps de la demande maintenant depuis 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())
A ceux qui se demandent d'où viennent les réponses!
Toutes les alternatives/solutions (comme décrit par la réponse) sont documentées dans le code obsolète correspondant! Manoeuvrez-le simplement (le code obsolète) en utilisant ce que signifie votre IDE supporte. Par exemple , pour voir l'alternative/solution au code obsolète RequestBody.create(...,...)
lors de l'utilisation AndroidStudio ou n'importe quel IDE de Jetbrain, appuyez longuement sur Ctrl
et survolez la RequestBody.create(...,...)
puis cliquez dessus quand elle est survolée avec succès
Vous devez importer ces fichiers manuellement. Il s'agit peut-être d'un bogue dans Android studio. Ce n'est pas suggéré, mais cela fonctionne pour Okhttp 4.2.2
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.RequestBody.Companion.asRequestBody
et utiliser comme
val file = File("path")
file.asRequestBody("image/jpeg".toMediaTypeOrNull())
Il est obsolète depuis version 4.0.0 de okhttp .
La documentation de cette version indique
@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)
Je ne l'ai pas essayé mais je pense que vous devriez être bon en faisant ce qui suit:
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();
}
}
}
Mise à jour: J'ai essayé de compiler le fichier montré ci-dessus en utilisant la version de dépendance suivante et RequestBody.Companion.create(json, JSON)
ne semble pas être obsolète.
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>4.0.0</version>
</dependency>
Je viens de jeter un coup d'œil à la documentation. Il se lit obsolète, cependant l'alternative est fournie dans le doc.
json.toRequestBody (contentType) devrait faire l'affaire pour vous.
Ci-dessous le lien de documentation:
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();
}
}