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 debug 或 postman
编辑
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我遇到了错误。实际上,当我们发布多部分参数时,我们必须将我们的 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的主要内容,如果未能解决你的问题,请参考以下文章
如何从 WCF REST Web 服务中的改造中获取来自@Part List<MultipartBody.Part> 发布请求的文件?
如何在 Kotlin android 的改造中使用 enque 方法