我正在使用volley库并获取XML中的响应。我想知道如何使用/ volley库解析响应。谢谢。针对Android的排球库解析xml响应?
回答
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 processdata method解析响应。使用简单的sax解析器或dom解析器来解析响应字符串。
看着排球的来源:
如果我没有记错的话,它带有JsonObjectRequest
和StringRequest
,但没有XMLRequest。
因此,您可以使用StringRequest
获得作为String
的响应,然后使用任何XML编组/序列化工具(例如:Simple
)将其转换为Object。
退房Simple
- XML编组工具: http://simple.sourceforge.net/download.php
如果使用StringRequest
,类似下面应该这样做:
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);
或者,您可以通过申请延长创建自己的XMLRequest类,并使用XML序列化工具(如简单)来返回对象。
希望它有帮助,
最近,我不得不创建一个SimpleXMLRequest类来解析XML响应使用凌空对象。以下是任何人都需要的代码片段:https://gist.github。com/itsalif/6149365 – Alif
谢谢你的回答。 – userAndroid
那么,为了解析数据,我们必须使用我们自己的解析逻辑? – userAndroid
这是我的解决方案。正如Sir Alif上面所说,volley可以为您提供从服务器接收到的原始XML数据字符串。所以,你需要做的就是分析这个字符串符合你的应用逻辑。所以,为了解析字符串,我使用了SAX解析器。我不打算在这里描述如何使用SAX解析器,因为你可以自己找到大量的教程,我只是描述关键点。下面的代码显示了当你创建SAXParserFactory,SAXParser,XMLReader等实例的时候,在这里你也创建了一个InputSource的实例,这是关键。通常情况下,您使用特定的URL地址打开连接,然后SAX解析器为您解析收到的数据。但是,就我们试图使用Volley库而言,我们将给InputSource不是InputStream,而是一个StringReader(有关输入源及其公共构造函数的完整信息,您可以找到here)。它看起来是这样的:
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);
}
所以,在活动中,你在哪里得到的StringRequest从截击,在onRespone()方法,你可以传递给makeList(String s)将方法响应(或者任何你称为具有相同功能的方法),它将解析你的响应。希望这可以帮助!如果您有问题,请在评论中提问。
首先,你必须获得通过响应字符串:
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
}
}
);
通过抽射输入反应得到后你用这种方法来输入流串转换响应:
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;
}
- 1. Android JSON解析排球库?
- 2. XML响应解析
- 3. 解析XML响应
- 4. 解析XML响应
- 5. 解析XML响应
- 6. 解析bit.ly的XML响应
- 7. 的Python解析XML响应
- 8. 如何从Http响应解析XML Android
- 9. 解析问题在解析XML响应的Android
- 10. 针对复杂xml的XML解析
- 11. 无法保存对数据库的XML解析响应
- 12. Laravel Guzzle解析XML响应
- 13. 如何解析xml响应?
- 14. 解析XML响应Xcode
- 15. 解析Amzon API * .xml响应
- 16. Xml解析肥皂响应
- 17. 解析eBay xml响应
- 18. 从API响应解析XML
- 19. Json解析器与排球库
- 20. 排球JSON响应
- 21. Android与排球:无法解析主机
- 22. 的Android解析JSON响应
- 23. Android排球访问chaching响应数据
- 24. Android的XML解析空指针异常
- 25. XPath来WS XML响应内解析XML
- 26. Android:最佳XML解析库?
- 27. 解析对java对象的soap xml响应对象
- 28. 解析Android应用程序中的XML响应
- 29. xml soap响应使用xml解析器方法解析
- 30. Android排球库登录响应json异常
@IftikarUrrhmanKhan我从来没有注意到它,谢谢我已经更新了相同的答案。 – Piyush
我将如何以xml格式请求带有用户名和密码的POST方法。 – Satheesh
只是一个细节,你有processData(响应)的错字; – estebanuri