2013-07-31 14 views

Antwort

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

in Process Methode parsen die response.Use einfachen SAX-Parser oder dom Parser die Antwortzeichenfolge zu analysieren.

+0

@ IftikarUrrhmanKhan Ich habe es nie bemerkt, danke ich habe die Antwort für die gleiche aktualisiert. – Piyush

+0

Wie werde ich die POST-Methode mit Benutzername und Passwort im XML-Format anfordern. – Satheesh

+0

nur ein Detail, Sie haben Tippfehler auf ProcessData (Antwort); – estebanuri

12

bei Volley der Quelle der Suche:

https://android.googlesource.com/platform/frameworks/volley/+/android-4.3_r0.9/src/com/android/volley/toolbox/

Wenn ich mich nicht täusche, kommt es mit JsonObjectRequest und StringRequest, aber keine XMLRequest.

So können Sie StringRequest verwenden, um die Antwort als String, zu erhalten und verwenden Sie dann ein beliebiges XML-Rangier/Serialisierung Werkzeug (ex: Simple), um ein Objekt zu konvertieren.

Check out Simple - XML-Rangierung Werkzeug: http://simple.sourceforge.net/download.php

Wenn Sie StringRequest, so etwas wie es tun soll Folgendes:

StringRequest request = new StringRequest(Request.Method.GET, url, 
    new Response.Listener<String>() 
    { 
     @Override 
     public void onResponse(String response) { 
      // convert the String response to XML 
      // if you use Simple, something like following should do it 
      Serializer serializer = new Persister(); 
      serializer.read(ObjectType.class, response); 
     } 
    }, 
    new Response.ErrorListener() 
    { 
     @Override 
     public void onErrorResponse(VolleyError error) {         
     // handle error response 
     } 
    } 
); 
queue.add(request); 

Alternativ können Sie Ihre eigene XMLRequest Klasse, indem sie von Antrag schaffen könnten und verwenden Sie das XML-Serialisierungstool (wie Simple), um das Objekt zurückzugeben.

Hoffe, dass es hilft,

+9

musste ich vor kurzem eine SimpleXMLRequest Klasse erstellen XML-Antwort auf Objekte mit Volley zu analysieren. Hier ist das Code-Snippet, wenn jemand benötigt: https: //gist.github.com/itsalif/6149365 – Alif

+0

Vielen Dank Alif für Ihre Antwort. – userAndroid

+0

Also, zum Parsen von Daten müssen wir unsere eigene Parsing-Logik verwenden? – userAndroid

2

Hier ist meine Lösung. Wie Sir Alif oben sagte, kann Volley Ihnen eine rohe Kette von XML-Daten liefern, die vom Server empfangen wurden. Alles, was Sie tun müssen, ist diesen String entsprechend Ihrer App-Logik zu analysieren. Also habe ich zum Parsen der Zeichenfolge den SAX-Parser verwendet. Ich werde hier nicht beschreiben, wie man den SAX-Parser benutzt, weil Sie jede Menge Tutorials selbst finden können. Ich werde nur den Schlüsselpunkt beschreiben. Der folgende Codeabschnitt zeigt den Zeitpunkt, an dem Sie Instanzen von SAXParserFactory, SAXParser, XMLReader usw. erstellen. Auch hier erstellen Sie eine Instanz von InputSource, und dies ist der Schlüsselpunkt. Normalerweise öffnen Sie eine Verbindung mit einer bestimmten URL-Adresse und der SAX-Parser analysiert die empfangenen Daten für Sie. Aber soweit wir versuchen, die Volley-Bibliothek zu verwenden, geben wir InputSource nicht den InputStream, sondern einen StringReader (vollständige Informationen über die Eingabequelle und seine öffentlichen Konstruktoren finden Sie unter here). Es wird wie folgt aussehen:

public void makeList(String s){ 
    SAXParserFactory factory = SAXParserFactory.newInstance(); 
    SAXParser sp = factory.newSAXParser(); 
    XMLReader xmlReader = sp.getXMLReader(); 
    SaxHandler handler = new SaxHandler(); 
    xmlReader.setContentHandler(handler);        
    InputSource is = new InputSource(new StringReader(s)); 
    is.setEncoding("UTF-8"); 
    xmlReader.parse(is); 
} 

Also, in der Aktivität, in dem Sie die StringRequest von Volley bekommen, in onRespone() Methode, die Sie, dass die Antwort auf den makelist (String s) Methode übergeben können (oder was auch immer Sie die Methode mit der gleichen Funktionalität aufgerufen), die diese Antwort analysiert. Hoffe das hilft! Wenn Sie Fragen haben, fragen Sie bitte in Kommentaren.

0

Zuerst müssen Sie Antwortstring erhalten von:

StringRequest req = new StringRequest(Request.Method.GET, url, 
new Response.Listener<String>() 
{ 
    @Override 
    public void onResponse(String response) { 
     InputStream is = convertStringToDocument(reponse); 
     // now you can parse xml 
    } 
}, 
new Response.ErrorListener() 
{ 
    @Override 
    public void onErrorResponse(VolleyError error) {         
    // handle error response 
    } 
} 

);

nach respone über Volley bekommen müssen Sie String Reaktion auf Eingangsstrom durch diese Methode konvertieren:

private static InputStream convertStringToDocument(String xmlStr) { 
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder; 
    try 
    { 
     builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(new InputSource(new StringReader(xmlStr))); 
     ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
     Source xmlSource = new DOMSource(doc); 
     Result outputTarget = new StreamResult(outputStream); 
     TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget); 
     InputStream is = new ByteArrayInputStream(outputStream.toByteArray()); 
     return is; 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 
Verwandte Themen