2016-06-10 7 views
2

내가 API 호출을 만들기 위해 노력하고있어 및 API가 형식의 XML 기대 :발리 --- XML ​​게시물 HTTP 포스트, 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를 사용하여 이러한 목표를 달성하기 위해 노력했습니다 : 라이브러리 내가 완전히 시도하고있어 작업을 지원하지 않는 경우가 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; 
    } 

잘 모르겠어요. 나는 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(); 
    }