Как исправить нерешенную проблему с ссылками на libcore в Android Studio? - PullRequest
0 голосов
/ 24 апреля 2020

Я пытался реализовать Xml Parser в Kotlin, в Android Studio, но я столкнулся с исключением:

Exception in thread "main" java.lang.RuntimeException: Stub!
    at android.util.Xml.newPullParser(Xml.java:60)"

Однако в моем коде мне никогда не нужно работать на смартфон или любое устройство. Я заглянул в файл «Xml. java», и оказалось, что библиотека libcore помечена как неразрешенная ссылка: import libcore.util.XmlObjectFactory; говорит, что «не может разрешить символ« libcore »».

Там мой код:

class XmlParser {

    //We instantiate the parser
    @Throws(XmlPullParserException::class, IOException::class)
    fun parse(inputStream: InputStream): List<*> {
        inputStream.use { inputStream ->
            val parser: XmlPullParser = newPullParser()
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false)
            parser.setInput(inputStream, null)
            parser.nextTag()
            return readResources(parser)
        }
    }

    //We create a function that is able to read an xml file with root:"resources"
    private fun readResources(parser: XmlPullParser): List<SuperRepository> {
        val resources = mutableListOf<SuperRepository>()

        parser.require(XmlPullParser.START_TAG, ns, "resources")
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.eventType != XmlPullParser.START_TAG) {
                continue
            }
            // Starts by looking for the entry tag
            if (parser.name == "SurRecueil") {
                resources.add(readSuperRepository(parser))
            } else {
                skip(parser)
        }
        }
        return resources
    }

    private fun readSuperRepository(parser: XmlPullParser): SuperRepository {
        val listOfRepository = mutableListOf<Repository>()
        parser.require(XmlPullParser.START_TAG, ns, "SurRecueil")
        val title = parser.getAttributeValue(null, "titre")
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.eventType != XmlPullParser.START_TAG) {
                continue
            }
            // Starts by looking for the entry tag
            if (parser.name == "Recueil") {
                listOfRepository.add(readRepository(parser))
            } else {
                skip(parser)
            }
        }
        listOfRepository.toList()
    return SuperRepository(title, listOfRepository)
    }

    private fun readRepository(parser: XmlPullParser): Repository {
        val listOfSongs = mutableListOf<Song>()
        parser.require(XmlPullParser.START_TAG, ns, "Recueil")
        val title = parser.getAttributeValue(null, "titre")
        while (parser.next() != XmlPullParser.END_TAG) {
            if (parser.eventType != XmlPullParser.START_TAG) {
                continue
            }
            // Starts by looking for the entry tag
            if (parser.name == "Chanson") {
                listOfSongs.add(readSong(parser))
            } else {
                skip(parser)
            }
        }
        listOfSongs.toList()
        return Repository(title, listOfSongs)
    }

    @Throws(IOException::class, XmlPullParserException::class)
    private fun readSong(parser: XmlPullParser): Song {
        parser.require(XmlPullParser.START_TAG, ns, "Chanson")
        val title = parser.getAttributeValue(null, "titre")
        val author = parser.getAttributeValue(null, "auteur")
        val lyrics = readText(parser)
        parser.require(XmlPullParser.END_TAG, ns, "Chanson")

        return Song(title, author, lyrics)
        }

    private fun readText(parser: XmlPullParser) : String {
        var result = ""
        if (parser.next() == XmlPullParser.TEXT) {
            result = parser.text
            parser.nextTag()
        }
        return result
    }

    @Throws(XmlPullParserException::class, IOException::class)
    private fun skip(parser: XmlPullParser) {
        if (parser.eventType != XmlPullParser.START_TAG) {
            throw IllegalStateException()
        }
        var depth = 1
        while (depth != 0) {
            when (parser.next()) {
                XmlPullParser.END_TAG -> depth--
                XmlPullParser.START_TAG -> depth++
            }
        }
    }
}

И:

fun main(){
    val fileName = "testxml.xml"
    val p = XmlParser()
    println(p.parse(File(fileName).inputStream()))

Знаете ли вы, как решить эту проблему?

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