android - 如何在 Android 库中获取 Context
问题描述
抱歉,如果我的标题与我的问题不符。我创建了一个 Android 库,其中有一个 Room 数据库,因为应该只有一个 Room 数据库实例,所以我有一个OfflineDatabaseManager
getInstance
方法,该方法通过传递上下文来提供实例来Android project
访问它。我在 Android 项目中有上下文,我可以通过它。
我想听一下库中数据库表上发生的变化,这样我就可以用它做点什么,我OfflineDataChangeListener
在库中编写了一个类,但是要获取数据库的实例,我需要传递上下文,我该怎么做请在图书馆内。
库 - 离线数据库管理器
class OfflineDatabaseManager private constructor(private val dp: LibraryDatabase) {
fun getOfflineData() : Flow<List<OfflineData>> {
return dp.getOfflineDataDao().getOfflineData()
}
suspend fun insertOfflineData(offlineData: OfflineData) {
dp.getOfflineDataDao().insertOfflineData(offlineData)
}
companion object {
@Volatile
private var INSTANCE: OfflineDatabaseManager? = null
fun getInstance(context: Context): OfflineDatabaseManager {
return INSTANCE ?: synchronized(this) {
INSTANCE ?: run {
val db = Room.databaseBuilder(
context,
LibraryDatabase::class.java, "database-name"
).build()
OfflineDatabaseManager(db).also { INSTANCE = it }
}
}
}
}
}
库 - OfflineDataChangeListener - 我如何通过上下文来获取数据库的实例
class OfflineDataChangeListener: CoroutineScope {
private var job: Job = Job()
override val coroutineContext: CoroutineContext
get() = Dispatchers.Main + job
fun observeOfflineDataChanges() {
launch {
OfflineDatabaseManager.getInstance(HOW TO GET CONTEXT HERE).getOfflineData().collect {
Log.d("dbChangeListener", "I am listening to databas echanges")
}
}
}
}
安卓项目——
在我的 android 项目中,这是我访问和收听更改的方式
fun getOfflineData() {
launch {
OfflineDatabaseManager.getInstance(app.applicationContext).getOfflineData().collect {
Timber.d( "observing offline data" + it.toString())
}
}
}
我想在图书馆内做同样的事情。
谢谢R
解决方案
Context
您可以为传递给您的库的客户端提供一些功能。在您的库中创建一个object
类:
object Library {
lateinit var context: Context
fun init(ctx: Context) {
context = ctx.applicationContext
}
}
客户端必须调用您的init()
函数,例如,在他们的应用程序的onCreate()
方法中:
Library.init(this)
在库中,您可以像这样访问它:
OfflineDatabaseManager.getInstance(Library.context)
推荐阅读
- javascript - POST 或 GET React 一个想法?
- c# - C# New byte[] PHP 等效项
- xml - 通过Apache freemarker模板读取#list命令中的节点索引号
- reactjs - API fetch React Native 后 AsyncStorage 存储空数组
- c++ - 如何在 C++ 中创建没有错误的模板类?
- php - 只有数组中的唯一元素
- python - 从包含类名但不包含 ID 的美丽 Soup 对象中获取所有类
- tsql - T sql Case in Where 子句
- python - 如何通过枚举检索枚举元组列表的元素?
- reactjs - 在 test 和 qa 中部署 env 文件