for循环内部try catch返回而不执行下一行

时间:2013-05-09 05:58:02

标签: java android xml xml-parsing

我有一个将xml字符串转换为list数组的函数。当达到最后一个条件时,它跳转到函数的最后一次返回。

代码在for循环之后不执行return语句,并且在for循环之后不执行任何行。它只是执行最后一个return语句。

功能如下所示

public List<List<String>> UpdateOrderDetailsTable(String xml) {
        List<List<String>> ll = new ArrayList<List<String>>();
        try {
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8"));
            Document doc = dBuilder.parse(is);
            doc.getDocumentElement().normalize();

            NodeList nList = doc.getElementsByTagName("ProductDetails");
            Log.i("1111",Integer.toString(nList.getLength()));
            if (nList.getLength() > 0) {


                // get all order details
                            //i=1 for neglect first tag
                for (int i = 1; i < nList.getLength(); i++) {

                    Node nNode = nList.item(i);


                    if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                        Element eElement = (Element) nNode;
                            List<String> l = new ArrayList<String>();
                            l.add(0, eElement.getElementsByTagName("OrderId").item(0).getTextContent());
                            l.add(1, eElement.getElementsByTagName("ProductId").item(0).getTextContent());
                            l.add(2, eElement.getElementsByTagName("ProductName").item(0).getTextContent());
                            l.add(3, eElement.getElementsByTagName("Model").item(0).getTextContent());
                            l.add(4, eElement.getElementsByTagName("Quantity").item(0).getTextContent());
                            ll.add(l);

                            Log.i(Integer.toString(i),eElement.getElementsByTagName("OrderId").item(0).getTextContent());

                    }

                }

                return ll;
            }
            Log.i("2222222222222222222","222222222222222222");
        } catch (Exception e) {
            Log.e("11111", e.toString());
        }
        return null;

    }

this is my xml

4 个答案:

答案 0 :(得分:0)

使用i=0运算符

// get all order details
                for (int i = 0; i < nList.getLength(); i++) {
}

}

答案 1 :(得分:0)

从你的代码中可以推断出,在for循环之后它不会执行任何语句的唯一情况是你得到了一些EXCETPION。根据您的意见,您说您在日志中没有看到任何异常。然后我怀疑你的记录器,为了测试尝试放置一些Sysout语句,以确保记录器是正确的。您的log.e()方法可能无法正常工作,只需尝试将log.i()放在异常块中并查看。

答案 2 :(得分:0)

如果您不想要第一个项目,请将if (nList.getLength() > 0)语句更改为if (nList.getLength() > 1)

还为else添加if (nNode.getNodeType() == Node.ELEMENT_NODE)语句并输入日志输出。 E.g:

if (nNode.getNodeType() == Node.ELEMENT_NODE) {
    Element eElement = (Element) nNode;
    List<String> l = new ArrayList<String>();
    l.add(0, eElement.getElementsByTagName("OrderId").item(0).getTextContent());
    l.add(1, eElement.getElementsByTagName("ProductId").item(0).getTextContent());
    l.add(2, eElement.getElementsByTagName("ProductName").item(0).getTextContent());
    l.add(3, eElement.getElementsByTagName("Model").item(0).getTextContent());
    l.add(4, eElement.getElementsByTagName("Quantity").item(0).getTextContent());
    ll.add(l);
    Log.i(Integer.toString(i), eElement.getElementsByTagName("OrderId").item(0).getTextContent());
} else {
    Log.wtf("1111", "Item " + i + "is not Node.ELEMENT_NODE type");
}

您的节点可能都不是类型ELEMENT_NODE

答案 3 :(得分:0)

public static ArrayList<ProductDetails> parserData(String data) {
    XmlPullParserFactory factory = null;
    XmlPullParser parser = null;
    ArrayList<ProductDetails> productDetailsList = new ArrayList<ProductDetails>();
    ProductDetails productDetails = null;
    data = data.replaceAll("&", "&amp;");
    data = data.replaceAll("<BR />", "");

    try {
        factory = XmlPullParserFactory.newInstance();
        parser = factory.newPullParser();
        parser.setInput(new StringReader(data));

        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            if (eventType == XmlPullParser.START_TAG) {
                if ("ProductDetails".equals(parser.getName())) {
                    productDetails = new ProductDetails();
                } else if ("OrderId".equals(parser.getName())) {
                    productDetails.setOrderId(Integer.parseInt(parser.nextText()));
                } else if ("ProductId".equals(parser.getName())) {
                    productDetails.setProductId(Integer.parseInt(parser.nextText()));
                } else if ("ProductName".equals(parser.getName())) {
                    productDetails.setProductName(parser.nextText());
                } else if ("Model".equals(parser.getName())) {
                    productDetails.setModel(parser.nextText());
                } else if ("Quantity".equals(parser.getName())) {
                    productDetails.setQuantity(Integer.parseInt(parser.nextText()));
                }
            } else if (eventType == XmlPullParser.END_TAG) {
                if ("ProductDetails".equals(parser.getName())) {
                    productDetailsList.add(productDetails);
                }
            }
            eventType = parser.next();
        }
        System.out.println();
    } catch (XmlPullParserException e) {
        e.printStackTrace();
        return null;
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
    return productDetailsList;
}