如何解决带有改造的Android Multipart调用中的动态哈希数组
距离我在这里的最后一个问题很久了!
直截了当:需要使用Android
在Retrofit
中发送具有以下结构(足够简单)的动态字典数组:
{
“fields”: [
{
“first: “a”,“last”: “b”
},{
“first: “a”,…
]
}
如果这是一个@FormUrlEncoded
带注释的调用,那很好,问题是我也需要发送图像,所以它是一个@Multipart
。
我已经在@Multipart
的{{1}}调用中成功发送了字符串参数,但是所有尝试都失败了。
根据code,翻新增加了对可迭代参数的支持,这就是做到这一点的方法
RequestBody
但是我已经完成了
@Multipart
@POST("/foo/bar/")
Call<ResponseBody> method(@Part("ping") List<String> ping);
它不起作用。对于2项列表,我只能得到最后一个,并且直接作为散列,而不是数组内部
@Multipart
@POST("/etc")
Call<Object> sendStuff(@Part("fields") List<Map<String,String>> fields);
List<Map<String,String>> list = new ArrayList<>();
for (int i = 0; i < fields.size(); i++) {
...
HashMap<String,String> h = new HashMap<>();
h.put("first",first);
h.put("last",last);
list.add(h);
}
getService(context).sendStuff(list);
尝试发送{"fields"=>"{\"first\":\"a\",\"last\":\"b\"}"}
列表,并使用Map<String,RequestBody>
创建每个值,但在服务器RequestBody.create(param,MediaType.parse("text/plain"))
上得到了一个空散列。
尝试了许多不同的方法,例如直接从{"intervals"=>"{}"}
发送RequestBody
到某处,但没有运气。我也做得很“亲密”
MultipartBody.Builder
这会导致带有编号索引的哈希。
Call<Object> sendStuff(@PartMap Map<String,RequestBody> params);
LinkedHashMap<String,RequestBody> mp = new LinkedHashMap<>();
for (int i = 0; i < fields(); i++) {
...
mp.put("fields[" + i + "][first]",RequestBody.create(first,MediaType.parse("text/plain")));
mp.put("fields[" + i + "][last]",RequestBody.create(last,MediaType.parse("text/plain")));
}
Call<?> call = getService(context).sendStuff(mp);
这还很远。需要一个数组。在{"fields"=>{"0"=>{"first"=>"12:42","last"=>"13:03"},"1"=>{"first"=>"13:30","last"=>"13:42"}}}
中,使用iOS
,我使用以下代码,该代码创建期望的数组而不是字典。很简单的东西
Alamofire
尝试了多种变体,包括“正式的”变体,没有一个起作用。我想我想念的东西似乎并不难,但我没主意了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。