2013-05-09 1 views
1

У меня есть функция для преобразования строки xml в массив списка. при достижении последнего условия он переходит к последнему возврату функции.для цикла внутри try catch return without execute next line

Код не выполняет оператор return после цикла for. И он не выполняет строку после цикла 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

+0

Это означает, что исключение было брошено в вашем 'for' петлю! Отлаживайте свой код и узнайте, какая строка бросает какое-то исключение! – SudoRahul

+0

Что вы видите в своем журнале? – BevynQ

+0

- ваш логарифм печатает любые исключения. – Gunaseelan

ответ

0

Использование i=0 оператор

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

} 
+1

Что делать, если в nList есть только один элемент, тогда это будет ArrayIndexOutOfBoundException – umesh

+0

@umesh: если nList содержит 1 элемент, то 'nList.getLength()' gets '1' не' 0'.'length' начинается с 1, а индекс начинается с '0'. – Shailesh

+0

ok, тогда в строке Node nNode = nList.item (i) ;, вы попытаетесь получить доступ к элементу по индексу 1, который недоступен – umesh

0

Из кода, можно сделать вывод о том, что единственный случай, он не будет выполнять какие-либо заявления после по что вы получаете некоторый EXCETPION. И в соответствии с вашими комментариями вы говорите, что не видите никаких исключений в журналах. Тогда я сомневаюсь, что ваш регистратор, ради тестирования, попытался поместить некоторые операторы Sysout, чтобы убедиться, что журнал правилен. Ваш метод log.e() может не работать должным образом, просто попробуйте поместить ваш log.i() в блок исключений и посмотреть.

+0

правильный, он получает какое-либо исключение, почему бы ему не отправить вывод logcat – umesh

+0

i'm sure.i alrdy положить точку останова внутри catch.if я вручную поместил nullpointer, это будет catch.so не проблема для логгера и catch.Then y ??? – kannan

+0

@umesh лог-кот только показывает журналы внутри цикла for.i'm исследует это за последние 8 часов – kannan

0

Если вы не хотите, первый элемент, а затем изменить if (nList.getLength() > 0) заявление if (nList.getLength() > 1)

также положить else заявление для if (nNode.getNodeType() == Node.ELEMENT_NODE) и поставить выход журнала. Например .:

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

+0

код не касается выражения else – kannan

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; 
}