如何替换不推荐使用的okhttp.RequestBody.create()

时间:2019-11-01 14:11:42

标签: android retrofit2 okhttp image-upload

我尝试使用 Retrofit 2 OkHttp3 从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()已过时。有人知道如何解决吗?

4 个答案:

答案 0 :(得分:2)

只需交换

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

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

答案 1 :(得分:1)

您可以更改:

    import Calendar from '@fullcalendar/core';
    import dayGridPlugin from '@fullcalendar/daygrid';
    import timeGridPlugin from '@fullcalendar/timegrid';
    import listPlugin from '@fullcalendar/list';

收件人:

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

答案 2 :(得分:1)

这是如何使用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/

答案 3 :(得分:0)

您也可以使用Kotlin扩展名。

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