解析XML错误,arrayindexoutofbounds异常。

时间:2014-04-29 18:27:32

标签: android xml

我试图将一些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} }。我一直在rtnmindexoutofbounds

1 个答案:

答案 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有一个确切的例子。