【问题标题】:How to send multiple images with data in retrofit android?如何在改造android中发送多张带有数据的图像?
【发布时间】:2022-01-05 07:39:48
【问题描述】:

我想通过 android 发送相同的数据。我正在使用改造 2。我尝试了各种其他代码 喜欢

 @Multipart
    @POST(POST_OTHER)
    suspend fun postOthers(
        @Part file: RequestBody
    ): Response<StringResponse>

它会给出类似的错误

java.lang.IllegalArgumentException: @Part annotation must supply a name or use MultipartBody.Part parameter type.

我不知道如何以正确的格式正确发送数据。我们将不胜感激。

    • 编辑 * *
  • 我实现了我的结果,但使用 ok http
 val builder: MultipartBody.Builder = MultipartBody.Builder().setType(MultipartBody.FORM)
            builder.addFormDataPart("user_id", "38")
            builder.addFormDataPart("name", "Yippee")
            builder.addFormDataPart("feature", "4")
            builder.addFormDataPart("title", "4")
            builder.addFormDataPart("description", "4")
            builder.addFormDataPart("price", "40.12")
            builder.addFormDataPart("cat", "hmmmm")

            for ((i, item) in finalImageList.withIndex()) {
                val file = filePath.createFileFromUri(item.uri!!)
                builder.addFormDataPart(
                    "file[$i]",
                    file?.name,
                    file!!.asRequestBody("image/*".toMediaType())
                )
            }

            val request: Request = Request.Builder()
                .url(Constants.BASE_URL + Constants.POST_OTHER)
                .post(builder.build())
                .build()
            val response: Response = OkHttpClient().newCall(request).execute()
            if (response.isSuccessful && response.body != null) {
                " success ${request.body}".printLog()
            } else "Some error".printLog()

如果我能得到一个等效的改造代码会很有帮助

【问题讨论】:

    标签: android kotlin postman retrofit2 multipartform-data


    【解决方案1】:

    使用注解@Body

    @POST(POST_OTHER)
    suspend fun postOthers(@Body body: RequestBody): Response<StringResponse>
    

    in request fun create --> MultipartBody.Builder()

    val multipart = MultipartBody.Builder().setType(MultipartBody.FORM)
    
    multipart.addFormDataPart(
    name = "file",
       filename = file1.name,
       body = file1.asRequestBody("image/*".toMediaType())
    )
    
    multipart.addFormDataPart(
       name = "file",
       filename = file2.name,
       body = file2.asRequestBody("image/*".toMediaType())
    )
    
    multipart.addFormDataPart(
       name = "file",
       filename = file3.name,
       body = file3.asRequestBody("image/*".toMediaType())
    )
    

    ...

    其中“file1,file2 file3”是您的图像 (Uri),它已转换为文件。

    并添加到多部分其他参数(标题、描述、价格、猫...)

    multipart.addFormDataPart("title", title)
    multipart.addFormDataPart("description", description)
    

    ....

    private fun sendRequest() {
       viewModelScope.launch(Dispatchers.IO) {
          postOthers(multipart.build())
       }
    }
    

    【讨论】:

    • 此解决方案无效
    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2020-11-17
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    相关资源
    最近更新 更多