【问题标题】:How to replace deprecated okhttp.RequestBody.create()如何替换已弃用的 okhttp.RequestBody.create()
【发布时间】:2020-02-27 20:04:21
【问题描述】:

我尝试使用 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


    【解决方案1】:

    您也可以使用 Kotlin 扩展。

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

    【讨论】:

      【解决方案2】:

      这里是如何使用来自 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】:

        你可以改变:

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

        到:

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

        【讨论】:

          【解决方案4】:

          只需交换来自

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

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

          【讨论】:

          • 这里也是一个 Kotlin 解决方案: 1. import okhttp3.RequestBody.Companion.toRequestBody 在 Kotlin 文件的导入部分。 2. 将文件类型的代码更改为imageFile.asRequest("image/*"),或者如果您有一些其他内容(例如字符串),则使用content.toRequestType(mediaType)
          猜你喜欢
          • 2018-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多