使用Retrofit发送多个动态字段

时间:2016-06-29 08:47:14

标签: android retrofit retrofit2

我们需要向需要动态多个字段的Web服务发送POST请求。

我的意思是,我们需要发送类似POST请求的内容:

question1='answer1'&question2='answer1'&question2='answer2'&question3='answer1'

其中question1和question2未在编译时设置。我们知道我们可以使用@FieldMap来使用动态字段,但是我们不能多次发送相同的字段。

这是我们的改造代码:

@FormUrlEncoded
@POST("/desafios/send/")
Observable<BaseServerMsgArray> postSubmitSurvey(@Field("customerId") Long customerId, @Field("upload_from_app") int uploadFromApp, @FieldMap HashMap<String, ArrayList<String>> hashFields);

有人可以帮助我们吗?

提前致谢,

2 个答案:

答案 0 :(得分:6)

如下所示准备HashMap,只放置用户回答的那些任务。

 HashMap<String, String> map = new HashMap<>();
 map.put("question1", answer1);
 map.put("question2", answer2);
 map.put("question3", answer3);

更改您的改造如下

@FormUrlEncoded
@POST("/desafios/send/")
Observable<BaseServerMsgArray> postSubmitSurvey(@Field("customerId") Long customerId, @Field("upload_from_app") int uploadFromApp, @FieldMap HashMap<String, String> hashFields);

并将HashMap作为最后一个参数传递给

答案 1 :(得分:1)

您需要的是可以包含重复键的地图。不幸的是,标准Android中没有这样的地图。您可以使用此https://github.com/greenrobot/essentials/blob/master/java-essentials/src/main/java/org/greenrobot/essentials/collections/Multimap.java

如果这不起作用,请尝试手动将问题转换为String并发送格式正确的String。