我试图将一些XML解析为字符串,并且我得到outofbounds
例外。我对android很新,也试图从网站上获取文本,即CTA Bus Tracker API。 XML
的一个块看起来像这样:
<route>
<rt>1</rt>
<rtnm>Bronzeville/Union Station</rtnm>
</route>
这是我的方法:
class loadRoutes extends AsyncTask<String, String, String[]> {
@Override
protected String[] doInBackground(String... strings) {
try {
URL routesURL = new URL(strings[0]);
BufferedReader in = new BufferedReader(new InputStreamReader(routesURL.openStream()));
String [] result = new String[2];
String line;
while((line = in.readLine()) != null) {
if(line.contains("<rt>")) {
int firstPos = line.indexOf("<rt>");
String tempNum = line.substring(firstPos);
tempNum = tempNum.replace("<rt>", "");
int lastPos = tempNum.indexOf("</rt>");
result[0] = tempNum.substring(0, lastPos);
in.readLine();
firstPos = line.indexOf("<rtnm>");
String tempName = line.substring(firstPos);
tempName = tempName.replace("<rtnm>", "");
lastPos = tempName.indexOf("</rtnm>");
result[1] = tempName.substring(0, lastPos);
}
}
in.close();
return result;
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
第一个readline()
使用rt
到达该行并获取该行,然后在if语句中,readline()
应该获得下一行,其中应包含{{1} }。我一直在rtnm
行indexoutofbounds
。
答案 0 :(得分:0)
while循环已在下一行读取,因此您不需要在if语句中in.readLine();
。尝试像这样运行它:
while((line = in.readLine()) != null) {
if(line.contains("<rt>")) {
int firstPos = line.indexOf("<rt>");
String tempNum = line.substring(firstPos);
tempNum = tempNum.replace("<rt>", "");
int lastPos = tempNum.indexOf("</rt>");
result[0] = tempNum.substring(0, lastPos);
} else if (line.contains("<rtnm>") {
firstPos = line.indexOf("<rtnm>");
String tempName = line.substring(firstPos);
tempName = tempName.replace("<rtnm>", "");
lastPos = tempName.indexOf("</rtnm>");
result[1] = tempName.substring(0, lastPos);
}
}
此外,在不同的类中编写自己的XML解析器可能更容易。这个XML parser android documentation有一个确切的例子。