Android库模块中的房间数据库设置

问题描述 投票:0回答:1

我有一个现有的Android项目,在其中创建了一个新的Android Library(离线服务库)(文件/新/新模块/ Android库)。在此库中,我想创建一个会议室数据库。

我遵循https://developer.android.com/training/data-storage/room并为我的数据库创建了Entity(OfflineData)和DAO(OfflineDataDao)设置,但是对于在哪里设置AppDatabase以及如何将其链接到库感到有些困惑。

@Database(entities = arrayOf(OfflineData::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun getOfflineDataDao(): OfflineDataDao
}

val db = Room.databaseBuilder(
            applicationContext,
            AppDatabase::class.java, "database-name"
        ).build()

在我的图书馆中,我没有任何扩展Application类的类。我应该创建一个扩展Application类的新类并在其中执行上述步骤。

请提出我应该怎么做才能通过Room数据库设置图书馆设置

这是我的带库的项目结构

enter image description here

android android-room android-library
1个回答
0
投票
  1. 在模块内部制作DatabaseManager Singleton类
class DatabaseManager private constructor(private val dp: AppDatabase) {
    // declare your function ...
    companion object {
        @Volatile
        private var INSTANCE: DatabaseManager? = null

        fun getInstance(context: Context): DatabaseManager {
            return INSTANCE ?: synchronized(this) {
                INSTANCE ?: run {
                    val db = Room.databaseBuilder(
                        context,
                        AppDatabase::class.java, "database-name"
                    ).build()
                    DatabaseManager(db).also { INSTANCE = it }
                }
            }
        }
    }
}
  1. 在其他模块中,您需要使用数据库,您必须在offlineservicelibrary中实现gradle并在调用时将上下文传递给它
DatabaseManager.getInstance(context).yourMethod()
© www.soinside.com 2019 - 2024. All rights reserved.