繁体   English   中英

如何使用 Kotlin 在 Activity 类之外的 Android 中获取文件

[英]How to get file in Android outside Activity class using Kotlin

所以我有一个RecipeListActivity ,它有一个 RecyclerView 和一个DataManager.kt单例,其中我将食谱存储在 HashMap 中。 我需要从 .xml 文件中读取这些食谱。

我设法使用assets.openRecipeListActivity访问它,但是我需要在 DataManager 类中访问它们,我不能assets.open那里使用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 文件位于何处并不重要,我只想访问它。 有哪些方法可以实现这一目标? 提前致谢!

如果没有 Context 实例,您将无法访问本地或内部文件。 您应该向您的 DataManager 类传递一个 Context 以在其构造函数中使用。 然后您可以使用context.resourcescontext.assets获取您的资源或资产。

class DataManager(private val context: Context) {

    //...

    init {
        seedRecipes()
    }

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

请注意,必须关闭输入流,而您在示例中并未这样做。 在 lambda 返回后, use函数会自动为您关闭流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM