2010-01-06 5 views
0

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

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

В заявлении уловов Я поймал NullPointerException и сделал это для печати ошибки.

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

Я понял 1 вещь: объект источника ввода освобожден до того, как 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" 4м конструктор в качестве аргументов.

+1

Не могли бы вы вставить полный стек NPE? –

+0

Кроме того, вы проверили, не указана ли какая-либо из ссылок в якобы ошибочном заявлении? – Samuh

+0

да самух я проверил и уверен уверен в том, что ... coz, как я сообщил ранее ...он отлично работает для небольших файлов размером около 1 страницы xml ... но он возвращает null для других – JaVadid

ответ

0

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

2

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

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

Cheers.

+0

Thanx Valentin. На самом деле я сам был отправлен в тюрьму на ват, чтобы опубликовать здесь. coz у меня были глобальные определения и много кода между фрагментом, который был наклеен. Thanx 4 ур ценные комментарии ... – JaVadid

0

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

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

0

проверки выше 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); 

будет работать InshaAllah ...

Смежные вопросы