【问题标题】:HTTP Post with Volley--- XML post, JSON Response带有 Volley 的 HTTP 发布--- XML 发布,JSON 响应
【发布时间】:2016-06-10 16:41:45
【问题描述】:

我正在尝试进行 API 调用,API 需要 XML 的格式:

 <root>
<subject>Security</subject>
<request>GetSessionInfo</request>
<sessionGUID>999999999999</sessionGUID>
<userGUID></userGUID>
<emptyString/>
<lastUpdateDate>
<forceLoad>0</forceLoad>
<transporterFormat>2</transporterFormat>
<parms>            {
                            "sessionGUID":"99999999999999"
            }
            </parms>
</root>

但它会将JSON 中的输出发送给我。我一直在尝试使用Volley

        RequestQueue mRequestQueue = RequestQueueSingleton
           .getInstance(this.getApplicationContext())
           .getRequestQueue();

        String targetURL = "http://api.myurl.com";

        StringRequest postRequest = new StringRequest(Request.Method.POST, targetURL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        userGUID = response;


                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                error.printStackTrace();
            }
        }) {
            @Override
            protected Map<String, String> getParams() throws AuthFailureError {
                Map<String, String> parms = new HashMap< >();
                JSONObject jsonRequest = new JSONObject();
                try {
                    jsonRequest.put("sessionGUID", sessionGUID);
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                parms.put("requestData",
                        getXML(SECURITY, GET_SESSION_INFO, "", sessionGUID, "", null, jsonRequest));
                return parms;
            }
        };
        postRequest.setTag("POST");
        System.out.println("we've attempted to use Volley");
        mRequestQueue.add(postRequest);


With the reference GetXML methods as follows: 

     public String getXML(String subject, String request, String userGUID, String sessionGUID,, Date lastUpdateDate, JSONObject parms) {
        StringBuilder stringBuilder = new StringBuilder();
        String date;
        if (lastUpdateDate == null) date = "";
        else date = lastUpdateDate.toString();
        stringBuilder.append("<root>\n <subject>" + subject + "</subject>\n")
        .append("<request>" + request + "</request>\n ")
                .append("<sessionGUID>" + sessionGUID + "</sessionGUID>\n")
                .append("<userGUID>" + userGUID + "</userGUID>\n")
                .append("<emptyString>" + "" + "</emptyString>\n ")
                .append("<lastUpdateDate>" + date + "</lastUpdateDate>\n ")
                .append("<forceLoad>0</forceLoad>\n" + " <transporterFormat>2</transporterFormat>\n")
                .append("<parms>" + parms.toString() + "</parms>\n" + "</root>");

        String result = stringBuilder.toString();
        System.out.println(result);
        return result;
    }

我不确定我对Volley 的使用是否存在问题,或者库是否完全不支持我正在尝试的操作。我认为我可能需要实现一个自定义请求类型,它发送一个XML 字符串并返回一个JSON 对象,但是相对缺乏文档让我不确定如何去做。任何帮助将不胜感激,对不起!

【问题讨论】:

    标签: android json xml post android-volley


    【解决方案1】:

    在 volley 中有一种方法可以发送自定义正文。这是通过覆盖 getBody() 来完成的。您不需要重写 getParams()。而是用下面的代码 sn-p 替换您的 getParams() 函数。

     @Override
        public byte[] getBody() throws AuthFailureError {
                   JSONObject jsonRequest = new JSONObject();
                    try {
                        jsonRequest.put("sessionGUID", sessionGUID);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
            String body = getXML(SECURITY, GET_SESSION_INFO, "", sessionGUID, "",  null, jsonRequest));
            return body.getBytes();
        }
    

    【讨论】:

      猜你喜欢
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 2017-11-13
      • 2014-11-14
      • 2020-01-07
      • 1970-01-01
      相关资源
      最近更新 更多