首页 > 解决方案 > 一起改造请求@Part 和@FieldMap

问题描述

我想向服务器发送一个发布请求,我有多个键值参数和一个文件列表,如下所示:

@FormUrlEncoded
@POST("index.php")
Call<MyObjResponse> myCall(@Part List<MultipartBody.Part> files, @FieldMap Map<String, String> params);

我收到一个错误:

java.lang.IllegalArgumentException:@Part 参数只能与多部分编码一起使用。(参数#1)retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752)处retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:743)处retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod)的方法IRestApi.pushLocalChangesWithMultipartCall .java:761) 在 retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:592) 在 retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:336) 在 retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:204)在 retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170) 在 retrofit2.Retrofit$1.invoke(Retrofit.java:147) 在 java.lang.reflect.Proxy.invoke(Proxy.java:

我试图@Multipart代替@FormUrlEncoded并且错误变为:

java.lang.IllegalArgumentException:@FieldMap 参数只能与表单编码一起使用。(参数#2)retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:752)处retrofit2.ServiceMethod$Builder.methodError(ServiceMethod.java:743)处retrofit2.ServiceMethod$Builder.parameterError(ServiceMethod)的方法IRestApi.pushLocalChangesWithMultipartCall .java:761) 在 retrofit2.ServiceMethod$Builder.parseParameterAnnotation(ServiceMethod.java:567) 在 retrofit2.ServiceMethod$Builder.parseParameter(ServiceMethod.java:336) 在 retrofit2.ServiceMethod$Builder.build(ServiceMethod.java:204)在 retrofit2.Retrofit.loadServiceMethod(Retrofit.java:170) 在 retrofit2.Retrofit$1.invoke(Retrofit.java:147) 在 java.lang.reflect.Proxy.invoke(Proxy.java:

psPOST是一个我不能使用的 multPUT

标签: androidretrofit

解决方案


如果你想使用,Multipart那么你应该使用@PartMap而不是@FieldMap

这是另一个答案中的示例

https://stackoverflow.com/a/40136931/8479132


推荐阅读