Как получить файл в Android вне класса Activity, используя Kotlin - PullRequest
0 голосов
/ 08 января 2020

Итак, у меня есть RecipeListActivity, у которого есть RecyclerView, и DataManager.kt синглтон, в котором у меня есть рецепты, хранящиеся в HashMap. Мне нужно прочитать эти рецепты из файла. xml.

Мне удалось получить к нему доступ из RecipeListActivity, используя assets.open, однако мне нужно получить к ним доступ в классе DataManager, и я не могу использовать assets.open там.

Так что в мой класс DataManager У меня есть следующая функция, которая работает на init().

private fun seedRecipes() {
    val parser = XmlPullParserHandler()
    val istream = File("recipes.xml").inputStream()
    recipes = parser.parse(istream)
}

Однако я получаю:

Причина: java .io.FileNotFoundException: recipes. xml: открыть не удалось: ENOENT (нет такого файла или каталога)

Неважно, где находится файл. xml, я просто хочу получить к нему доступ. Какими способами это можно сделать? Заранее спасибо!

1 Ответ

1 голос
/ 08 января 2020

Вы не можете получить доступ к локальным или внутренним файлам без экземпляра Context. Вы должны передать вашему классу DataManager Context для использования в его конструкторе. Тогда вы можете получить свои ресурсы или активы с context.resources или context.assets.

class DataManager(private val context: Context) {

    //...

    init {
        seedRecipes()
    }

    private fun seedRecipes() {
        recipes = context.assets.open("locations.xml").use {
            XmlPullParserHandler().parse(it)
        }
    }
}

Обратите внимание, входные потоки должны быть закрыты, чего вы не сделали в своем примере. Функция use автоматически закрывает для вас поток после возвращения его лямбды.

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