Возникли проблемы при чтении XML-файла с помощью getResource (). ReadText () - PullRequest
0 голосов
/ 14 июня 2019

Я пытаюсь читать различные xml-файлы из ресурсов в моем проекте, и после некоторого поиска я обнаружил, что getResource().readText(), похоже, работает нормально для большинства.Тем не менее, когда я пытаюсь сделать это, вывод просто куча

�������������� @ �����������*.

Я не эксперт, но, думаю, это как-то связано с UTF-8, но я просто не могу найти ответ.

val fileContent = 
this::class.java.getResource("/res/xml/test.xml").readText(Charsets.UTF_8)

(я пробовал как с, так и без "Charsets.UTF_8" )

XML-файл, который я пытаюсь прочитать:

<?xml version="1.0" encoding="UTF-8"?><request><getInkLevels/></request>

1 Ответ

0 голосов
/ 17 июня 2019

Метод Class#getResource(String), который вы пробовали, обычно не используется в разработке Android.Каноническая практика заключается в использовании экземпляра класса Resources, полученного из экземпляра Context.Вы можете прочитать руководство для разработчиков , чтобы узнать больше.

Ознакомьтесь с этим ответом , чтобы узнать, что, на мой взгляд, является самым простым способом удовлетворения ваших потребностей.

Предлагает сохранить ваш XML-файл в каталоге /res/raw и обращаться к нему во время выполнения через Resources#openRawResource(int).Этот метод возвращает входной поток, который вы можете прочитать, однако работает лучше для вас.Некоторые библиотеки синтаксического анализа XML могут принимать входной поток напрямую.Вы также можете прочитать поток в строку, например, так:

import android.content.res.Resources
import androidx.annotation.RawRes

fun readXmlResourceAsString(resources: Resources, @RawRes xmlResId: Int): String =
    resources.openRawResource(xmlResId).use { resourceStream ->
        String(resourceStream.readBytes(), Charsets.UTF_8)
    }

Я также упомяну, что есть метод, который звучит так, как будто он должен лучше соответствовать вашим потребностям, а именно Resources#getXml(Int).Однако он возвращает экземпляр android.content.res.XmlResourceParser, который имеет довольно ограниченные возможности синтаксического анализа.Я сильно подозреваю, что вам будет крайне сложно использовать этот класс для достижения того, что вы намерены делать со своим XML.

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