【发布时间】:2018-09-07 07:56:34
【问题描述】:
我正在创建一个库(使用 Kotlin)并且需要创建一个字符串扩展来搜索 ArrayList 并返回一个值。由于扩展会被多次调用,我只想加载 ArrayList 一次并重用它,所以到目前为止我的方法是这样的:
创建字符串扩展,这可以正常工作,没有问题。
扩展在单例中调用一个返回结果的函数,这种方法有效,因为我在单例的 init 中手动创建了 ArrayList。最终解决方案需要从 res/raw 文件夹中读取一个 .csv 文件,然后创建 ArrayList,这就是我的问题开始的地方。
我正在努力寻找读取 .csv 文件的示例,目前我有一个解决方案(测试应用程序,而不是库),它使用以下代码行从 /app/src/main/assets 读取 .csv :
applicationContext.assets.open("test.csv").bufferedReader().use {}
这是读取文件的最佳方法吗,/res/raw 似乎更合乎逻辑?
假设我当前的方法是好的,只要我将此代码移入我的库并在单例中使用它,我就会遇到与上下文相关的问题。我不希望扩展必须将上下文传递给单例,理想情况下我希望单例的 init 能够获取上下文。
总而言之...我正在尝试在库中找到我的 Singleton 访问上下文的方法,以便 .csv 文件只能加载到 ArrayList 中一次。
【问题讨论】:
-
查看这篇文章:stackoverflow.com/a/16053523/5125812 和这篇文章:stackoverflow.com/a/9421473/5125812 -- 还要小心在单例中持有对上下文的引用,确保您正在使用应用程序上下文。我的建议是让您的库尽可能不了解 Android,也许您将所需的数据加载到其他地方,然后将其传递到您的库中?
标签: android kotlin singleton android-context