NullPointerException с XMLpullparser

может я не вижу. Я использую xpppullpullparser.

Этот код запускает XmlPullparser и считывает XML-данные из HTTP-потока. (Поток работает, я проверял)

Строка _текст = "";

            try {
                // Startet den XML Leser
                XmlPullParserFactory factory =    XmlPullParserFactory.newInstance();
                factory.setNamespaceAware(true);
                XmlPullParser xpp = factory.newPullParser();
                try {
                    // Startet die Connection, um XML Daten zu bekommen
                    URL _url = new URL(url[0]);
                    HttpURLConnection con = (HttpURLConnection) _url.openConnection();
                    _text = readStream(con.getInputStream());
                    // Setzt xml auf Input an
                    xpp.setInput(new StringReader(_text));
                    readXML(xpp);

Теперь вот функция readXML. Он должен разобрать XML в объект WeatherData. (Не важно, что такое WeatherData, потому что синтаксический анализ не работает)

private weatherData readXML(XmlPullParser xpp)
{
    weatherData _result = new weatherData();
    try {
        int _eventType = xpp.getEventType();
        String _name;

        while (_eventType != xpp.END_DOCUMENT) {
            _name = xpp.getName();
            if (_name == null)
            Log.i("i", "Tja, null...");
            if (_name.equals("city") && _eventType == xpp.START_TAG)
            {

                int _id = Integer.parseInt(xpp.getAttributeValue("", "id"));
                Log.i("_id", new Integer(_id).toString());

            }
            xpp.next();
            _eventType = xpp.getEventType();
        }
    }
    catch (Exception e)
    {
        Log.e("i", "exception: " + e.getMessage() + " " + e.getLocalizedMessage());
    }

return _result;
}

xpp.getName() просто дает мне пустую строку. Есть идеи, почему?


person snowparrot    schedule 08.03.2015    source источник
comment
Выкладывайте свои логи из logcat   -  person Konrad Krakowiak    schedule 08.03.2015
comment
Можете выложить xml?   -  person Dermot Blair    schedule 08.03.2015
comment
Ссылка на xml: api.openweathermap.org/data/2.5/weather. ?q=Hamburg&mode=xml это журнал 03-08 12:41:41.208 19603-19760/com.test.wetter.wetterapp I/i﹕ Tja, null... 03-08 12:41:41.209 19603-19760/com.test.wetter.wetterapp Исключение E/i: null null   -  person snowparrot    schedule 08.03.2015


Ответы (1)


Трудно точно знать, что здесь происходит, поскольку вы не опубликовали анализируемый XML или какую-либо дополнительную информацию о том, где именно это происходит.

Однако естественно, что XmlPullParser возвращает null на getName(), когда eventType равно XmlPullParser.TEXT (указывая, что символьные данные были прочитаны и будут доступны при вызове getText()). В этом случае вам нужно вызвать метод getText(), чтобы получить содержимое тега XML.

person Gil Moshayof    schedule 08.03.2015
comment
ссылка на xml: api.openweathermap.org/data/2.5/weather ?q=Гамбург&mode=xml - person snowparrot; 08.03.2015
comment
А по Германии не получается? Если да, то это твоя проблема. Вам нужно обязательно проверить тип события, и если это ТЕКСТ, то вам нужно вызвать getText(), чтобы присвоить внутреннее значение тега Country xml. - person Gil Moshayof; 08.03.2015
comment
Эй, я изменил его следующим образом: if ( _eventType == xpp.START_TAG && xpp.getName().equals(city)) { int _id = Integer.parseInt(xpp.getAttributeValue(, id)); // Log.i(_id, новый Integer(_id).toString()); _result.set_id(_id); } Теперь он сначала будет смотреть, есть ли нормальный тег. Спасибо за совет. - person snowparrot; 08.03.2015