问题描述
我一直在尝试弄清楚如何在正文中使用带有 HTML 元素标签的 Volley,但可以使用一些帮助。
例如,对于我使用的 API,使用 POST 创建用户所需的格式如下所示:
{
"username":"","password":"","email":"someone@example.invalid","first_name":"John","last_name":"Doe","phone_number":"202-555-0113","address":"123 Road Name","city":"Jamesetown","state":"AZ","postal_code":"12345","country":"United States",}
...我能够在Android端格式化并成功处理POST,如下所示:
@Override
public byte[] getBody() throws AuthFailureError {
Map<String,String> bodykeyvalue = new HashMap<>();
bodykeyvalue.put("username",accountName);
bodykeyvalue.put("password",accountPassword);
bodykeyvalue.put("email",email);
bodykeyvalue.put("first_name",first);
bodykeyvalue.put("last_name",last);
// etc.
return new JSONObject(bodykeyvalue).toString().getBytes();
}
然而,当涉及到需要使用元素标签格式化的 POST 时,我似乎无法弄清楚在我的 Volley 正文中将如何格式化。如何将其放入 MAP 对象中?在任何回复中,如果 getBodyContentType 也需要更改,您能否也通知我?标头内容类型应保持不变。谢谢!
<sci_request version="1.2">
<data_service>
<targets>
<device id="1234-5678" />
</targets>
<requests>
<device_request target_name="myTarget">
some request string value
</device_request>
</requests>
</data_service>
</sci_request>
解决方法
我发现这比预期容易得多......只需按如下方式更改正文:
@Override
public byte[] getBody() throws AuthFailureError {
String data =
"<sci_request version=\"1.2\">" +
"<data_service>" +
"<targets>" +
"<device id=\"1234-5678\" />" +
"</targets>" +
"<requests>" +
"<device_request target_name=\"myTarget\">" +
"some request string value" +
"</device_request>" +
"</requests>" +
"</data_service>" +
"</sci_request>";
return data.getBytes();
}
需要注意的是,这是一个 Volley StringRequest,此处并未显示所有代码。