如何替换已弃用的 okhttp.RequestBody.create()

问题描述 投票:0回答:5

我尝试使用 Retrofit 2OkHttp3 将图像从 Android 应用程序上传到 Django 服务器。 为此,我曾经使用以下几行创建一个

RequestBody
实例:

RequestBody requestImageFile =
                    // NOW this call is DEPRECATED
                    RequestBody.create(
                            MediaType.parse("image/*"),

                            // a File instance created via the path string to the image
                            imageFile
                    );

我在下一个方法调用中使用了前一个实例作为参数:

// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part image = MultipartBody.Part.createFormData("image", imageFile.getName(), requestImageFile);

最后,我启动了 Retrofit 界面来完成剩下的工作:

// finally, execute the request
Call<ResponseBody> call = service.upload(image);
call.enqueue(new Callback<ResponseBody>() {
     @Override
     public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
            Log.v("Upload", "success");
     }

     @Override
     public void onFailure(Call<ResponseBody> call, Throwable t) {
            Log.e("Upload error:", t.getMessage());
     }
});

几个月前,Android Studio 并没有告诉我

create()
已被弃用。当我现在打开该项目时,它告诉我
create()
已被弃用。有人知道如何解决吗?

android retrofit2 okhttp image-upload
5个回答
46
投票

只需交换

的参数
RequestBody.create(MediaType.parse("image/*"), imageFile);

RequestBody.create(imageFile, MediaType.parse("image/*"));

7
投票

您也可以使用 Kotlin 扩展。

val requestImageFile = imageFile.asRequestBody("image/*".toMediaTypeOrNull())

5
投票

以下是如何使用 okhttp 中的 kotlin 扩展函数轻松完成此操作,例如: toRequestBody():

更改自:

val requestImageFile = RequestBody.create(
                            MediaType.parse("image/*"),
                            imageFile
                    );

对此:

val requestImageFile = imageFile.toRequestBody(MediaType.parse("image/*"))

' 更多信息在这里:https://square.github.io/okhttp/upgrading_to_okhttp_4/


2
投票

您可以更改:

RequestBody.create(MediaType.parse("image/*"), imageFile);

至:

RequestBody.Companion.create(imageFile, MediaType.parse("image/*"))

0
投票

我用的是这个:

val responseBody: ResponseBody = body.toResponseBody("application/json; charset=utf-8".toMediaType())
© www.soinside.com 2019 - 2024. All rights reserved.