【发布时间】:2019-01-04 23:54:24
【问题描述】:
我正在开发一个应用程序,其中用户必须从列表中选择任意数量的国家,并且我必须通过多部分发送选定的名称。
我没有与 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: Part body must not be null。
我还提到改造的 ChangeLog 提到“新:支持使用 OkHttp 的 MultipartBody.Part 的可迭代和数组 @Part 参数”,但经过一番挖掘,我发现给定的示例相当混乱,以至于我不确定如何在我的代码中实现它,并且无法找到甚至提到在多部分中发送数组的教程。
这样的事情根本不可能吗?
【问题讨论】:
-
使用 PartMap 注解的解决方案似乎是对的。我在一些应用程序中使用它并且工作正常。你确定所有国家都不为空吗?
标签: android multipartform-data retrofit2