В рамках более крупного проекта я использую XMLPullParser для считывания данных из новостной ленты BB C rss. Когда я нажимаю «Выполнить», я получаю список дубликатов последнего элемента (заголовок, описание, pubDate и ссылка). Однако, когда я помещаю точку останова в строку с Log.i (), тогда мой код работает отлично и вытягивает каждую статью с ее правильными переменными. Любая идея, почему это будет работать по-разному с отладкой против запуска?
publishProgress (100) - это то, что инициирует добавление статьи в ListView в реальном приложении. Вот ссылка на RSS-канал, который я анализирую: http://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml
try {
val url = URL(bbcUrl)
val urlConnection = url.openConnection() as HttpURLConnection
val inStream = urlConnection.inputStream
//Set up the XML parser:
val factory = XmlPullParserFactory.newInstance()
factory.isNamespaceAware = false
val xpp = factory.newPullParser()
xpp.setInput(inStream, "UTF-8")
var eventType: Int = xpp.eventType //While not the end of the document:
while (eventType != XmlPullParser.END_DOCUMENT) {
eventType = xpp.eventType
when (eventType) {
XmlPullParser.START_TAG //This is a start tag < ... >
-> {
if(xpp.name == "item")
Log.i("newItem", "New Article Found") //Breakpoint goes here
when (xpp.name) {
"title" -> {
xpp.next()
title = xpp.text
publishProgress(25)
}
"description" -> {
xpp.next()
description = xpp.text
publishProgress(50)
}
"link" -> {
xpp.next()
link = xpp.text
publishProgress(75)
}
"pubDate" -> {
xpp.next()
pubDate = xpp.text
publishProgress(100)
}
null -> {
}
}
}
XmlPullParser.END_TAG //This is an end tag: </ ... >
-> {
}
XmlPullParser.TEXT //This is text between tags < ... > Hello world </ ... >
-> {
}
}
xpp.next() // move the pointer to next XML element
}
}
catch(ex: MalformedURLException){
ret = "MalformedUrlException"
}
catch(ex : IOException ){
ret = "IO Exception"
}
catch(ex : XmlPullParserException){
ret = "XML Pull Exception. The XML is not properly formed"
}
Редактировать: Никогда не решал root этой проблемы, но добавлял сон (1 ) в то время как l oop рядом с моим Log.i () заставил программу работать как задумано. Все еще ищу ответ, но пока это будет работать.