2017-06-06 64 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 –