【问题标题】:retrofit request @Part and @Query in kotlin androidkotlin android中的改造请求@Part和@Query
【发布时间】:2022-01-04 10:48:09
【问题描述】:

我想在改造 android.enter image description here我尝试了很多解决方案但没有得到任何成功。这是我的代码和 api。

@Multipart @POST("上传/配置文件") fun uploadProfilePhoto(@Part image: MultipartBody.Part, @Query("userId") userId: String): 调用

    val photoContent = RequestBody.create(MediaType.parse("image/*"), file)
    val photo = MultipartBody.Part.createFormData("image", file.name, photoContent)

【问题讨论】:

    标签: android kotlin file-upload retrofit2 multipartform-data


    【解决方案1】:

    你必须检查uploadProfilePhoto函数返回类型。
    它应该是 Call 并且 T 应该定义。 如果您仍然收到错误信息。显示更多。像 breakpoint debugpostman

    编辑

    interface UploadImage{
        @Multipart
        @POST("upload/profile")
        fun upload(@Query("userId") userId: String, @Part part: 
            MultipartBody.Part) : Call<LoginSignUpGeneralResponse>
    }
    
    val call = Retrofit.Builder().baseUrl(baseUrl)
    .addConverterFactory(GsonConverterFactory.create())
    .build()
    .create(UploadImage::class.java)
    .upload(userId,image)
    call.enqueue(object : Callback<LoginSignUpGeneralResponse>{
            override fun onResponse(//params){TODO()}
            override fun onFailure(//params){TODO()}
    })
    

    【讨论】:

    • 感谢您的回复。我的 uploadProfilePhoto 函数返回类型是 Call 并且在拨打电话后,控制器永远不会成功或失败。
    • 您的 Api 工作正常且代码是最新的。我认为调用未添加到队列中检查调用 execute() 或 enqueue()
    • 这是我的 api 请求函数` fun uploadPhoto(userId: String, image: MultipartBody.Part){ val userDataService = RetrofitClient.service val call = userDataService.uploadPhoto(image,userId) call.enqueue( object : Callback { override fun onResponse(call: Call, resp: Response) { if (resp.body() != null) { }else { } } override fun onFailure(call: Call , t: Throwable) { t.printStackTrace() } }) }`
    • 我改变了我的答案它可以帮助你。我不认识你为什么不定义T
    【解决方案2】:

    我遇到了错误。实际上,当我们发布多部分参数时,我们必须将我们的 formData 名称与 API 中的后端匹配。就我而言,它是“image/png”val photo = MultipartBody.Part.createFormData("image", file.name, photoContent)

    【讨论】:

      【解决方案3】:

      像这样发送您的请求

      val userId: RequestBody = userId.toRequestBody("multipart/formdata".toMediaTypeOrNull())
      
      val image = file.asRequestBody("multipart/form-data".toMediaTypeOrNull())
      val photo = MultipartBody.Part.createFormData("images", file.name, image)
      

      将此用户 ID 用作图片的 requestBody 和照片

      
      @Multipart
          @POST("upload/profile")
          fun uploadProfilePhoto(
              @Part image: MultipartBody.Part,
              @Part("userId") userId: RequestBody
          ): Call<LoginSignUpGeneralResponse>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-25
        • 2020-01-21
        • 2019-05-20
        • 1970-01-01
        • 2021-05-21
        • 2018-01-08
        • 2021-02-25
        • 1970-01-01
        相关资源
        最近更新 更多