kotlin android中的改造请求@Part和@Query

Posted

技术标签:

【中文标题】kotlin android中的改造请求@Part和@Query【英文标题】:retrofit request @Part and @Query in kotlin android 【发布时间】: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)

【问题讨论】:

【参考方案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 并且在拨打电话后,控制器永远不会成功或失败。 这是我的邮递员。 drive.google.com/file/d/1V28aAS84AarMIfaaPQRrByFxQ0HSt-fN/…drive.google.com/file/d/1GVtg1dqgsu97OTc5mvnJc2YKoh8Jq2hm/… 您的 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>

【讨论】:

以上是关于kotlin android中的改造请求@Part和@Query的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin 使用协程处理改造请求

如何从 WCF REST Web 服务中的改造中获取来自@Part List<MultipartBody.Part> 发布请求的文件?

如何从改造响应 kotlin android 下载图像

如何在 Kotlin android 的改造中使用 enque 方法

如何将 localhost 与改造结合使用来测试 android 应用程序 kotlin [重复]

如何在正文中传递api参数而不是@Query标签android kotlin改造