Android 使用改型将名称/值对作为多部分中的对象发送
在我的代码中,我必须发出一个MultipartForm Data PUT请求来更新服务器中的一个对象,它应该是Multipart的,因为用户可能会将一个图像与数据一起发送 为了做到这一点,我目前正在使用改型,因为它是我非常熟悉的一个库,它正在向服务器发送图像 但是,服务器端的情况发生了变化,现在必须发送的参数之一是:Android 使用改型将名称/值对作为多部分中的对象发送,android,retrofit,multipartform-data,http-put,Android,Retrofit,Multipartform Data,Http Put,在我的代码中,我必须发出一个MultipartForm Data PUT请求来更新服务器中的一个对象,它应该是Multipart的,因为用户可能会将一个图像与数据一起发送 为了做到这一点,我目前正在使用改型,因为它是我非常熟悉的一个库,它正在向服务器发送图像 但是,服务器端的情况发生了变化,现在必须发送的参数之一是: {"step": {"type":"begin"} } 然而,事实证明,要做到这一点非常困难 我尝试过的方法包括将其作为MultipartTypedOutput传递、手动
{"step":
{"type":"begin"}
}
然而,事实证明,要做到这一点非常困难
我尝试过的方法包括将其作为MultipartTypedOutput传递、手动键入字符串传递和将JSONObject转换为字符串传递,所有这些都让我:
改装。改装错误:400错误请求
所使用的URL是正确的,我已经与维护服务器的人员进行了双重检查,它正在到达服务器,但是使用了错误的“步骤”对象
我还尝试将其作为NameValuePair、Map和HashMap传递,所有这些都给了我:
改装。改装错误:零件主体不能为空
@FieldPart看起来非常适合这一点,但它与Multipart不兼容,所以有没有办法通过改装实现这一点
我目前的卖出方法如下:
@Headers({
"Connection: Keep-Alive",
"Accept-Language: en-US"
})
@Multipart
@PUT("/0.1/user/{id}")
String updateUser(@Path("id") String userId, @Part("step") Map<String,String> type);
@标题({
“连接:保持活动状态”,
“接受语言:en US”
})
@多部分
@PUT(“/0.1/user/{id}”)
字符串updateUser(@Path(“id”)字符串userId,@Part(“step”)映射类型);
地图类型已更改为我前面提到的所有类型。您实际上是以正确的方式进行的,只需要一些快速修复。我有两个建议给你, 1.您可以创建这样的内部类
public class Example {
@SerializedName("type")
@Expose
private String type;
/**
*
* @return
* The type
*/
public String getType() {
return type;
}
/**
*
* @param type
* The type
*/
public void setType(String type) {
this.type = type;
}
}
在本例中,您的api如下所示
@Multipart
@PUT("/0.1/user/{id}")
String updateUser(@Path("id") String userId, @Part("step") Example exp);
com.google.gson
包下。在这里,您需要执行以下操作:,
JsonObject settingObject=新建JsonObject();
settingObject.addProperty(“类型”、“开始”);
在这种情况下,
字符串updateUser(@Path(“id”)字符串userId,@Part(“step”)JsonObject obj)这就是您所需要的,顺便说一句,您也可以一次性设置标题,为什么要费心在api上定义它?我仍然不明白问题是什么,因为即使尝试Ankush提到的内容,也会出现“Part body不得为null”的情况 不管是哪种方式,我与一些朋友进行了交谈,后来进行了一些联系人扩展,我得到了以下解决方案:
@Headers({
"Connection: Keep-Alive",
"Accept-Language: en-US"
})
@Multipart
@PUT("/0.1/user/{id}")
String updateUser(@Path("id") String userId, @Part("step[type]") String type);
据我所知,改装文档中没有提到这一点,但它确实有效。请添加您当前正在运行的代码以及HTTP请求的响应。抱歉,在重新编写问题几次后,忘记了重新添加实际代码。问题是被编辑来纠正的。@拉普拉斯如果下面的答案符合你的目的,考虑回答它并关闭它。我道歉这么长时间,项目的其他部分需要立即注意。事实证明,无论出于什么原因,这两种方法仍然给了我“PartBody不能为null”错误,但我确实设法用另一种方式解决了它。