我试图通过输入该xml文件的url作为我的doInBackground函数中的参数来解析我得到的xml文件。现在我调用这个函数2次。
在第一次通话期间,它可以正常工作。
在第二次调用期间,它给出了一个解析错误:
08-16 23:49:20.823 27735-28009 / be.project.randomreader W / System.err:org.xml.sax.SAXParseException:意外的令牌(位置:TEXT {"成功": {" tot ... @ 1:210 in java.io.InputStreamReader@9e143cb)
是否必须对"?"标志和" ="登录我的网址?
如何更改代码以解决此问题?
//first call:
ArrayList<String> url= new ArrayList<String>();
url.add("http://api.theysaidso.com/qod.xml");
url.add("");
new DownloadXML().execute(url);
//second call after a click event:
ArrayList<String> url= new ArrayList<String>();
url.add("http://api.theysaidso.com/");
url.add("qod?category=" + random);
new DownloadXML().execute(url);
private class DownloadXML extends AsyncTask<ArrayList<String>,Void,ArrayList> {
@Override
protected ArrayList doInBackground(ArrayList<String>... url) {
try {
ArrayList<String> urlLijst = url[0];
String query = URLEncoder.encode(urlLijst.get(1), "utf-8");
String url1 = urlLijst.get(0) + query;
URL url2 = new URL(url1); //.toString()
URLConnection conn = url2.openConnection();
DocumentBuilderFactory factory = documentBuilderFactor.get();
DocumentBuilder parser = factory.newDocumentBuilder();
Document doc = parser.parse(conn.getInputStream());
parser.reset();
NodeList nodes = doc.getElementsByTagName("quotes");
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList title = element.getElementsByTagName("quote");
Element quote = (Element) title.item(0);
lijstQuotes.add(quote.getTextContent());
}
for (int i = 0; i < nodes.getLength(); i++) {
Element element = (Element) nodes.item(i);
NodeList title = element.getElementsByTagName("author");
Element author = (Element) title.item(0);
lijstQuotes.add(author.getTextContent());
}
}
}
}
答案 0 :(得分:1)
从
更改您的第二个电话url.add("http://api.theysaidso.com/");
url.add("qod?category=" + random);
到
url.add("http://api.theysaidso.com/qod.xml?category=" + random);
theysaidso API似乎根据发送的标头或显式格式请求更改其编码。通过附加.xml,您将强制格式为xml。在另一种情况下,您将返回json响应并且解析器失败。更多信息在这里 https://theysaidso.com/api
答案 1 :(得分:0)
第一次打电话给你
url[0] = "http://api.theysaidso.com/qod.xml"
在第二场中:
"http://api.theysaidso.com/"
所以,你没有第二次获得XML。
尝试更改
url.add("http://api.theysaidso.com/");
url.add("qod?category=" + random);
到
url.add("http://api.theysaidso.com/qod?category=" + random);
url.add("");