2016-06-10 89 views
2

我試圖讓API調用和API要求的格式XMLHTTP與後凌空--- XML後,JSON響應

<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對象的自定義請求類型,但相對缺乏文檔使我不確定如何執行此操作。任何幫助將不勝感激,抱歉的長度!

回答

1

有排球的方式,我們可以發送定製的身體。這是通過重寫getBody()來完成的。您不需要重寫getParams()。而是用下面的代碼片段替換你的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(); 
    }