2017-06-06 62 views
0

一多的PartMap请求相同PARAM多个值我想送一个多查询相同的特性参数的多个值。这里是我的代码:使用与改造2

接口:

@Multipart 
@POST("user") 
Observable<Void> updateUser(@PartMap() Map<String, RequestBody> partMap, @Part MultipartBody.Part photo); 

这个请求让我更新了新的图片和一些参数的用户。在参数中,我可以用一个名为“skills []”的参数来指定用户的技能。要指定数量不同的参数,我使用HashMap;但是使用HashMap,我无法使用相同的名称指定多个参数。

即我不能这样做:

for(Integer skill : skills) { 
    RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), skill.toString()); 
    map.put("skills[]", body); 
} 

因为地图只接受相同的密钥的一个值。

我如何可以指定一个参数的多个值。使用Postman来测试请求,我没有问题。

我试图用HashMap<String, List<RequestBody>>代替:

List<RequestBody> bodies = new ArrayList<>(); 
for(Integer skill : skills) { 
    RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), skill.toString()); 
    bodies.add(body); 
} 
map.put("skills[]", bodies); 

但似乎它不支持。创建查询包含空值的请求主体:

Content-Disposition: form-data; name="skills[]" 
Content-Transfer-Encoding: binary 
Content-Type: application/json; charset=UTF-8 
Content-Length: 16 

[null,null,null] 
+1

退房这answer.The答案是关于如何在凌空发布multipale参数,但我猜它在你的情况下工作。我在我的项目中对Retrofit做同样的事情,它工作正常可能对你有帮助。这里是[refernce](https://stackoverflow.com/questions/35239778/android-volley-how-to-post-multiple-parameters/35239922#35239922)。 –

回答

1

固定感谢Andy Developer

我还是用HashMap<String, RequestBody>,但我提供不同的参数名称:

for(int i = 0; i < skills.size(); i++) { 
    Integer skill = skills.get(i); 
    RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), skill.toString()); 
    map.put("skills[" + i + "]", body); 
} 
0

使用此创建文本RequestBody对象:

RequestBody userPhone = RequestBody.create(MediaType.parse("text/plain"), phoneNumber); 
    RequestBody userEmail = RequestBody.create(MediaType.parse("text/plain"), email); 

希望这有助于。

+0

谢谢,但我已经是具有相同名称的多个请求主体没有问题创造RequestBody我的问题(在我的情况“的技能[]) – Showpath

+0

喔对,你可以做一个JSONArray并把它检查此链接 的https:/ /stackoverflow.com/questions/11449803/android-adding-json-objects-into-an-array –