2016-05-14 70 views
3

我正在開發一個應用程序,在這個應用程序中,用戶必須從列表中選擇任意數量的國家,並且必須通過多部分發送選定的名稱。是否可以使用Retrofit通過Multipart發送String []?

我沒有上傳任何文件和字符串[],但沒有路由上傳信息,如果它不是多部分,我沒有任何關於Web服務器如何操作的說法。

我試圖簡單地將其作爲一個數組,ArrayList和JsonArray這樣:

@Headers({ 
    "Connection: Keep-Alive", 
}) 
@Multipart 
@PUT("/user/{id}") 
String updateUser(@Path("id") int userId, @Part("user[countries]") String[] countries); 

我也嘗試this solution,但我要麼誤解了它或它不工作。下面是我嘗試使用代碼:

ArrayList<String> countries = CountryManager.getInstance().getSelectedCountryIds(); 
RequestBody requestBody; 
LinkedHashMap<String, RequestBody> hashMap = new LinkedHashMap<>(); 

for(int i = 0; i < countries.size(); i++) { 
    requestBody = RequestBody.create(MediaType.parse("text/plain"), countries.get(i)); 
    hashMap.put("countries["+i+"]", requestBody); 
} 

並相應地更改改造方法:

@Headers({ 
    "Connection: Keep-Alive", 
}) 
@Multipart 
@PUT("/user/{id}") 
String updateUser(@Path("id") int userId, @PartMap() Map countries); 

然而,在我已經得到了錯誤retrofit.RetrofitError所有嘗試:身體部分不能爲空。

我也提到ChangeLog改造提到「新:支持迭代和使用OkHttp的MultipartBody.Part陣列@Part參數」,但經過一些挖掘,我發現給定的例子很混亂,以至於我不確定如何在我的代碼中實現它,並且無法找到甚至提到以多部分發送數組的教程。

這樣的事情簡直不可能嗎?

+0

使用PartMap註解的解決方案似乎是正確的。我在一些應用中使用它,並且工作正常。你確定所有的國家都不是零? – Pablo

回答

2

我知道我遲到了這個答案。您可以使用@Query("someKey[]")以多部分形式發送數組列表。 Heres是工作的例子。

@Multipart 
    @POST("./") 
    Call<JsonElement> addSubEvent(@Part(EndAPI.USE_CASE) RequestBody useCase, 
            @Query("event_id[]") ArrayList<String> event_id, 
            @Query("user_id[]") ArrayList<String> user_id, 
            @Query("name[]") ArrayList<String> name, 
            @Query("date_time[]") ArrayList<String> date_time, 
            @Part("token") RequestBody token, 
            @Part MultipartBody.Part... profilePic); 

希望它會幫助一些人尋求答案。

+0

如何在php中解析arraylist – bipin

1

只要使用@part( 「項目[]」)列表項

像這樣:

List<String> items = new ArrayList(); 
    items.add("1"); 
    items.add("2"); 
    items.add("3"); 

@Multipart 
@POST("/") 
Call<Result> yourMethod(@PartMap() Map<String, RequestBody> partMap, @PartMap() Map<String, RequestBody> map, @Part MultipartBody.Part file, @Part("items[]") List<String> items); 
+0

如何在php中解析這個數組? – bipin

相關問題