Android - 如何使用 Volley HTTP Post 和 body 中的元素标签

Android - How to use Volley HTTP Post with element tags in body

我一直在尝试弄清楚如何在 body 中将 Volley 与 HTML 元素标签一起使用,但需要一些帮助。

例如,对于我正在使用的 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 body 中如何格式化它。我如何将其放入 MAP object?在任何回复中,如果 getBodyContentType 也需要更改,您能否也告诉我? header content-type 应该保持不变。谢谢!

<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,这里并未显示所有代码。