Разбор XML для Android - PullRequest
       23

Разбор XML для Android

0 голосов
/ 06 января 2010

Возникла странная проблема ... Я проверил несколько сайтов, но не смог найти ничего плохого в коде ... Но он возвращает NullPointerException ...

try { 

    SAXParserFactory f = SAXParserFactory.newInstance();
    SAXParser parser = f.newSAXParser();
    XMLReader reader = parser.getXMLReader();
    reader.setContentHandler(handler);
    System.out.println(uri_this);
    reader.parse(new InputSource(url_this.openStream())); // i get nullpointerexception here 

} catch (NullPointerException e) {
    System.out.println(e);
}

В операторе catch я поймал NullPointerException и заставил его напечатать ошибку.

ContentHandler - это хорошо, потому что у меня есть проанализированные файлы для маленьких файлов, но для больших файлов, похоже, не работает. В чем проблема? Или мне нужна буферизация для больших файлов? Я не в курсе и перепробовал все возможности, кроме буферизации, потому что я не знаю, как это кодировать.

Я понял одну вещь: объект источника ввода освобождается до того, как reader.parse может закончиться. Я не понимаю, почему это происходит.

LogCat дает следующее (только ошибочная часть):

01-06 15:12:27.145: INFO/System.out(319): http://mywebsite.com/products_xml.php?cPath=43
01-06 15:12:31.094: DEBUG/dalvikvm(319): GC freed 4031 objects / 203424 bytes in 189ms
01-06 15:12:31.505: DEBUG/dalvikvm(100): GC freed 3326 objects / 190192 bytes in 283ms
01-06 15:12:34.274: DEBUG/dalvikvm(319): GC freed 1153 objects / 80432 bytes in 146ms
01-06 15:12:34.646: INFO/System.out(319): java.lang.NullPointerException

Я получаю URL "url_this" 4m конструктор в качестве аргументов.

Ответы [ 4 ]

2 голосов
/ 06 января 2010

Здесь недостаточно информации, чтобы помочь вам, но вы заметили, что вы печатаете переменную с именем uri_this в оболочке, но разыменование url для анализа? Так как тот факт, что файл журнала показывает http://mywebsite.com/products_xml.php?cPath=43, это не означает автоматически, что переменная url инициализирована и также содержит эту строку.

Или это может быть так, что метод openStream () объекта url (какого бы типа он ни был) возвращает нуль в некоторых условиях, и InputSource не может обработать передаваемый ноль в конструкторе. Как я уже сказал, в кратком фрагменте недостаточно информации для решения вашей проблемы.

Приветствие.

0 голосов
/ 05 апреля 2013

проверьте вышеуказанный URL http://www.androidhive.info/2011/11/android-xml-parsing-tutorial/

изменения, внесенные в XMLParser.java

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity);

это будет работать, ИншаАллах ...

0 голосов
/ 23 февраля 2011

Я только что выпустил библиотеку, чтобы сделать анализ XML на Android в 10 раз проще, чем сейчас. Это очень маленький уровень абстракции, который расположен поверх существующих библиотек синтаксического анализа XML-данных, предоставляемых средой выполнения, и позволяет использовать простые пути, похожие на xpath, к элементам для получения проанализированных значений обратно.

Влияние на производительность практически не влияет на существующую операцию разбора, это очень простая / чистая реализация: http://www.thebuzzmedia.com/software/simple-java-xml-parser-sjxp/

0 голосов
/ 08 января 2010

Привет всем спасибо. Я понял свою ошибку фактически в 1 случае между начальным и конечным тегом не было текста ... следовательно, переменная, в которой я хранил текст, была нулевой ... я вызвал .toString () для этого. в результате чего исключение - NullPointerException. Спасибо всем за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...