Java Android多部分调用中的动态哈希数组及其改进
自从我上次在这里提问以来已经很久了 直截了当:需要使用Java Android多部分调用中的动态哈希数组及其改进,java,android,retrofit,okhttp,multipart,Java,Android,Retrofit,Okhttp,Multipart,自从我上次在这里提问以来已经很久了 直截了当:需要使用改型在Android中发送一个动态字典数组,结构如下(足够简单): { “fields”: [ { “first: “a”, “last”: “b” }, { “first: “a”, “last”: “b” }, … ] } 如果这是一个@FormUrlEncoded带注释的调用,就可以了,问题是我还需要发送一个图像,所以它是一个@Multipart调用 我已在使用Request
改型在Android
中发送一个动态字典数组,结构如下(足够简单):
{
“fields”: [
{
“first: “a”,
“last”: “b”
},
{
“first: “a”,
“last”: “b”
},
…
]
}
如果这是一个@FormUrlEncoded
带注释的调用,就可以了,问题是我还需要发送一个图像,所以它是一个@Multipart
调用
我已在使用RequestBody
的@Multipart
调用中成功发送字符串参数,但所有尝试均失败
根据,改装增加了对iterable参数的支持,这就是实现这一点的方法
@Multipart
@POST("/foo/bar/")
Call<ResponseBody> method(@Part("ping") List<String> ping);
尝试发送映射
列表,使用RequestBody.create(param,MediaType.parse(“text/plain”))创建每个值
,但在服务器上得到一个空哈希值{“interval”=>“{}
尝试了许多不同的方法,比如通过MultipartBody.Builder
直接发送RequestBody
,就像在某处看到的那样,但没有运气。我也“接近”了
这仍然很遥远。需要一个数组。在iOS
中,使用Alamofire
,我使用以下代码,它创建了预期的数组而不是字典。非常简单的东西
rootValue.forEach { element in
for key in element.keys {
if let value = element[key] as? String, let data = value.data(using: .utf8) {
multipartFormData.append(data, withName: "\(rootKey)[][\(key)]")
}
}
}
尝试了许多变化,包括“官方”的一个和没有工作。我想我错过了一些东西,似乎不难做到,但我已经没有主意了
{"fields"=>"{\"first\":\"a\",\"last\":\"b\"}"}
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"}}}
rootValue.forEach { element in
for key in element.keys {
if let value = element[key] as? String, let data = value.data(using: .utf8) {
multipartFormData.append(data, withName: "\(rootKey)[][\(key)]")
}
}
}