2016-05-14 2 views
3

Я разрабатываю приложение, в котором пользователь должен выбрать любое количество стран из списка, и я должен отправить выбранные имена через multipart.Можно ли отправить String [] через Multipart с помощью Retrofit?

Я не загружаю никаких файлов вместе со строкой [], но нет маршрута для загрузки информации, не будучи многочастным, и у меня нет никаких сообщений о том, как работает веб-сервер.

Я попытался просто отправить его в виде массива, 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 для модернизации упоминает «New: Поддержка итерации и массив @Part параметров с помощью OkHttp-х MultipartBody.Part», но после некоторого копания, я нашел данный пример весьма запутанный к тому, что я нахожусь unsure о том, как реализовать его в моем коде, и не смог найти учебник, который даже упоминал о отправке массивов в multipart.

Неужели это просто невозможно?

+0

Решение, использующее аннотацию PartMap, кажется правильным. Я использовал его в некоторых приложениях и отлично работает. Вы уверены, что все страны не являются нулевыми? – Pablo

ответ

2

Я знаю, что я опоздал на этот ответ. вы можете использовать @Query("someKey[]") для отправки arraylist в multipart. Это рабочий пример.

@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

как разобрать arraylist в php – 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

Смежные вопросы