Метод 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.