web-dev-qa-db-ja.com

Okhttp3-RequestBody.create(contentType、content)非推奨

非推奨メソッドを置き換える方法の例は見つかりませんでした。 okhttp3メインページの例は古いものです。これはその1つです。

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」を使用しています

39
Matías

Java Solution:たとえば、create(String, MediaType)の代わりにcreate(MediaType, String)を使用します

Kotlin Solution:拡張関数を使用content.toRequestBody(contentType);ファイルタイプfile.asRequestBody(contentType)

注: kotlinを使用していますが、IDEはimport okhttp3.RequestBody.Companion.toRequestBodyのようなクラスまたはメソッドを自動的にインポートしないので、手動でインポートします。 ..それから@Pratyeshによって与えられた例としてそれを使います

詳細:ドキュメント

(Android Studioまたは任意のJetbrainのIDEでは、非推奨のメソッドまたはクラスの解決策は、Ctrlを押しながらcreate(...)/RequestBody.create

60
YuTang

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 support。例を示しますAndroidStudioまたは任意のJetbrainを使用する場合の非推奨コードRequestBody.create(...,...)の代替/解決策を確認するにはIDE、単にCtrlを長押ししてRequestBody.create(...,...)の上にカーソルを置き、正常にマウスオーバーしたときにそれをクリックします

17
Pratyesh

これらのファイルを手動でインポートする必要があります。これは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())
12
Saeed Younus

okhttp3のバージョン4.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)
_

私は試したことはありませんが、次のことを実行すれば、あなたは良いことになるはずです。

_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>
_
7
jlmayorga

ドキュメントをざっと見ただけです。廃止予定ですが、代替案はドキュメントで提供されています。
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();
  }
}
1
Arpan Kanthal