pullParser Android выдает все элементы в logcat, но не в приложении

#android #xmlpullparser

#Android #xmlpullparser — анализатор #xmlpullparser

Вопрос:

выходные данные моего проанализированного XML-файла в logcat показывают все элементы, но моя активность показывает только последний элемент.

Logcat:

 06-16 22:06:19.780   9871-10111/notendop.norge I/System.out﹕ TIME: 23:00:00
06-16 22:06:19.780   9871-10111/notendop.norge I/System.out﹕ DATE: 2014-06-16
06-16 22:06:19.780   9871-10111/notendop.norge I/System.out﹕ regen VALUE 0
06-16 22:06:19.780   9871-10111/notendop.norge I/System.out﹕ wind richting Nord-nordøst
06-16 22:06:19.785   9871-10111/notendop.norge I/System.out﹕ wind Svak vind
06-16 22:06:19.785   9871-10111/notendop.norge I/System.out﹕ temp 12
06-16 22:06:19.785   9871-10111/notendop.norge I/System.out﹕ TIME: 00:00:00
06-16 22:06:19.785   9871-10111/notendop.norge I/System.out﹕ DATE: 2014-06-17
06-16 22:06:19.785   9871-10111/notendop.norge I/System.out﹕ regen VALUE 0
06-16 22:06:19.785   9871-10111/notendop.norge I/System.out﹕ wind richting Øst-nordøst
06-16 22:06:19.785   9871-10111/notendop.norge I/System.out﹕ wind Lett bris
  

(часть) Код:

  private ArrayList<NewsItem> parseNews(InputStream in) throws XmlPullParserException, IOException {

    ArrayList<NewsItem> newsList = new ArrayList<NewsItem>();
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser pullParser = factory.newPullParser();
    pullParser.setInput(in, "UTF-8");

    int eventType = pullParser.getEventType();

    NewsItem item = null;

    while (eventType != XmlPullParser.END_DOCUMENT) {String tagName;
         if (eventType == XmlPullParser.START_TAG)
         {tagName = pullParser.getName();
         if (tagName.equals(TAG_TABULAR)) {item = new NewsItem();}

         else if (tagName.equals(TAG_TIME)) {
             if (item != null) {
                 item.mTime_SV = pullParser.getAttributeValue(null, "from");
                 StringTokenizer tokens = new StringTokenizer(item.mTime_SV, "T");
                 item.mDate = tokens.nextToken();
                 item.mTime = tokens.nextToken();
                 System.out.println("TIME: "   item.mTime);
                 System.out.println("DATE: "   item.mDate);
             }
         }

         else if (tagName.equals(TAG_TEMP)) {
            if (item != null) {
                item.mTemp_SV = pullParser.getAttributeValue(null,"value");
                System.out.println("temp "   item.mTemp_SV);
            }
         }

         else if (tagName.equals(TAG_REGEN_MIN)) {
             if (item != null) {
                 item.mRegen_min_SV = pullParser.getAttributeValue(null,"value");
                 System.out.println("regen VALUE "   item.mRegen_min_SV);
             }
         }

         else if (tagName.equals(TAG_WIND_DESC)) {
            if (item != null) {
                item.mWind_desc_SV = pullParser.getAttributeValue(null,"name");
                System.out.println("wind "   item.mWind_desc_SV);
            }
         }

        else if (tagName.equals(TAG_WIND_RICHTING)) {
            if (item != null) {
                item.mWind_richting_SV = pullParser.getAttributeValue(null,"name");
                System.out.println("wind richting "   item.mWind_richting_SV);
            }
        }

          //   eventType = pullParser.next();
    }

    else if (eventType == XmlPullParser.END_TAG) { tagName = pullParser.getName();
        if (tagName.equals(TAG_TABULAR)) {
            newsList.add(item);
            item = null;
        }
    }

    eventType = pullParser.next();
    }

    return newsList;

     }
  

Я пропустил цикл или что-то еще?

Комментарии:

1. это ссылка на XML-файл: yr.no/sted/Norge/Sogn_og_Fjordane/Gloppen/Sandane/varsel.xml

Ответ №1:

ну, каждый раз, когда вы нажимаете на тег TAG_TABULAR , вы делаете это

 tagName.equals(TAG_TABULAR)) {item = new NewsItem();
  

так что все, что уже было в вашем списке, будет уничтожено.

возможно, вам следует лучше отформатировать свой код, и вы, возможно, заметили это

Комментарии:

1. ну, очевидно, что есть что-то другое между 2, если один работает. проверьте xml и дважды проверьте рабочий, но если какой-либо тег TAG_TABULAR появляется в xml более одного раза, ваш список будет уничтожен при следующем обнаружении этого тега