Post XML request and XML response Volley Library

旧城冷巷雨未停 提交于 2019-12-11 06:13:28

问题


I have already integrated volley library working good with JSON. Now am trying to access WCF SOAP I do not know how to pass XML string as request and how to get XML string as response.


回答1:


    // Tag used to cancel the request
    String  tag_string_req = "string_req";

    //String url = "URL......";



    final ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...");
    pDialog.show();

    StringRequest strReq = new StringRequest(Request.Method.POST,
            url, new Response.Listener<String>() {

        @Override
        public void onResponse(String response) {
            Log.d(TAG, response.toString());
            pDialog.hide();

        }
    }, new Response.ErrorListener() {

        @Override
        public void onErrorResponse(VolleyError error) {
            VolleyLog.d(TAG, "Error: " + error.getMessage());
            pDialog.hide();
        }
    }){

        @Override
        public String getBodyContentType() {
            return "application/xml; charset=" +
                    getParamsEncoding();
        }

        @Override
        public byte[] getBody() throws AuthFailureError {
            String postData = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
                    "<sampletag>\n" +
                    "\t<sampletag>data</sampletag>\n" +
                    "</sampletag>"; // TODO get your final output
            try {
                return postData == null ? null :
                        postData.getBytes(getParamsEncoding());
            } catch (UnsupportedEncodingException uee) {
                // TODO consider if some other action should be taken
                return null;
            }
        }
        };

// Adding request to request queue AppController.getInstance().addToRequestQueue(strReq, tag_string_req);




回答2:


You can use the String request of Volley. The String request returns a string which can you parse using XMLReader

StringRequest req = new StringRequest(Request.Method.GET, url, 
new Response.Listener<String>() 
{
    @Override
    public void onResponse(String response) {
        processDataUsingXMLReader(reponse);
    }
}, 
new Response.ErrorListener() 
{
     @Override
     public void onErrorResponse(VolleyError error) {                                
     // handle error response
   }
}
);



回答3:


Volley does not have any XML Request, checkout the official documentation: https://android.googlesource.com/platform/frameworks/volley/+/android-4.3_r0.9/src/com/android/volley/toolbox/

There are two ways you can do it:

Method 1

So, you will have to fetch the raw String using StringRequest and then parse it.

Code:

StringRequest request = new StringRequest(Request.Method.GET, url, 
    new Response.Listener<String>() 
    {
        @Override
        public void onResponse(String response) {
          // now, convert response (String) to XML 
        }
    }, 
    new Response.ErrorListener() 
    {
         @Override
         public void onErrorResponse(VolleyError error) {                                
          //error
       }
    }
);
queue.add(request);

To convert String to XML: You can try Simple-XML, it is a XML Marshaling Tool. Link : http://simple.sourceforge.net/download.php

Sample code (string to xml using Simple) :

 Serializer serializer = new Persister();
 serializer.read(Pojo.class, response);  

Method 2

Try this Volley Adapter Class : https://gist.github.com/itsalif/6149365 It also does the same, using Simple-XML to serialize XML Objects without your coding effort.




回答4:


Assuming you want to parse XML data using Android Volley from the String response, you can achieve this by converting the response to an InputStream using ByteArrayInputStream, as follows:

StringRequest stringRequest = new StringRequest(Request.Method.GET, url, 
    new Response.Listener<String>() {
        @Override
        public void onResponse(String response) {
            XMLParser xmlParser = new XMLParser();
            InputStream inputStream = new 
            ByteArrayInputStream(response.getBytes("UTF-8"));
            List<YourObject> object = new ArrayList<>();
            object.addAll(xmlParser.parseFeed(inputStream));
        }
    }, 
    new Response.ErrorListener() { 
        @Override
        public void onErrorResponse(VolleyError error) {                             
        }
    }
);

This example simply demonstrates parsing an RSS feed and storing an array of objects in a List, which is demonstrated in greater detail here.



来源:https://stackoverflow.com/questions/43678487/post-xml-request-and-xml-response-volley-library

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!