Разбор XML и получение разных результатов при запуске отладчика, а не только при запуске - PullRequest
1 голос
/ 25 марта 2020

В рамках более крупного проекта я использую 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 () заставил программу работать как задумано. Все еще ищу ответ, но пока это будет работать.

...