Я разрабатываю приложение, в котором пользователь должен выбрать любое количество стран из списка, и я должен отправить выбранные имена через 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.
Неужели это просто невозможно?
Решение, использующее аннотацию PartMap, кажется правильным. Я использовал его в некоторых приложениях и отлично работает. Вы уверены, что все страны не являются нулевыми? – Pablo