android - 如何发送包含字符串数组和文件数组的多部分

标签 android kotlin retrofit2

我正在使用以下代码发送包含多个参数类型的后期多重请求:

    @Multipart
    @POST("**")
    fun sendRequest(
        @Part("ContactType") contactType: RequestBody? = null,
        @Part("Description") description: RequestBody? = null,
        @Part("ServiceProviderId") serviceProviderId: RequestBody? = null,
        @Part("Title") title: RequestBody? = null,
        @Part("Latitude") latitude: RequestBody? = null,
        @Part("Mobile") mobile: RequestBody? = null,
        @Part("Longitude") longitude: RequestBody? = null,
        @Query("MainActivities[]") mainActivities :ArrayList<String>,
        @Part("Files") files: List<MultipartBody.Part>
    ): Observable<SendRequestResponse>

这是我设置值的方法:
        val titleBody = createBodyRequestFromString(title.value ?: "")
        val latitudeBody = createBodyRequestFromString(lat.value ?: "")
        val longitudeBody = createBodyRequestFromString(lng.value ?: "")
        val contactTypeBody = createBodyRequestFromString(contactType.value.toString() ?: "")
        val serviceProviderIdBody = createBodyRequestFromString(serviceProviderId.value ?: "")
        val mobileBody = createBodyRequestFromString(phoneNumber.value ?: "")

        val mainActivitiesBody: ArrayList<RequestBody> = ArrayList()
        createBodyRequestFromString(mainActivities.value?.get(0)).let { mainActivitiesBody.add(it) }

    private fun createBodyRequestFromString(string: String?): RequestBody {
        return RequestBody.create("text/plain".toMediaTypeOrNull(), string!!)
    }


    private fun addFileAsMultipart() {
        val imagesParts = ArrayList<MultipartBody.Part>(selectedImages.size)

        selectedImages.forEachIndexed { index, file ->
            val requestBody = RequestBody.create("image/jpeg".toMediaTypeOrNull(), file)
            imagesParts.add(
                MultipartBody.Part.createFormData(
                    "files",
                    file.name,
                    requestBody
                )
            )
        }}

它一直在说:

@Part parameters using the MultipartBody.Part must not include a part name in the annotation. (parameter #10)



当我走出文件时,后端无法获取我的RequestBody值。

如何发送包含字符串数组和文件数组的多部分内容?

最佳答案

试试这个tutorial帮助我很多

按照本教程..您必须更改
这条线

@Part("Files") files: List<MultipartBody.Part> //kotlin
@Part("Files) List<MultipartBody.Part> files //java

用这条线
@Part files: List<MultipartBody.Part> //kotlin
@Part List<MultipartBody.Part> files //java

并改变这条线
MultipartBody.Part.createFormData("files",file.name,requestBody)

用这条线
MultipartBody.Part.createFormData("files[]",file.name,requestBody)

我希望它能起作用^ _ ^

关于android - 如何发送包含字符串数组和文件数组的多部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60926818/

相关文章:

java - Eclipse错误: cannot be resolved to a type

android - 如何在 Android 应用程序中下载和安装 .apk 文件?

android - ViewModel中的LiveData类型不匹配

android - 使 RxJava 异步任务线程安全

android - Android 上的形状属性

android - 如何在多次单击 Button 时多次更改 TextView?

java - 如何正确地将@DefaultProperty 注释添加到使用@NamedArg 的自定义类

kotlin - 如何撰写以下Kotlin契约(Contract)?

android - 如何在 Kotlin MVVM 数据绑定(bind)中解析 Json

node.js - retrofit 未根据要求附加车身