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

Room database setup in Android Library module

我有一个现有的 Android 项目,我在其中创建了一个新的 Android Library (offlineservicelibrary)(File/new/New module/Android 库)。在这个图书馆我想创建一个房间数据库。

我按照 https://developer.android.com/training/data-storage/room 并为我的数据库创建了 Entity (OfflineData) 和 DAO(OfflineDataDao) 设置,但我对在哪里设置 AppDatabase 以及如何 Link 它到库感到有点困惑.

@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()

在我的库中,我没有任何扩展应用程序 class 的 class。我是否应该创建一个新的 class 来扩展应用程序 class 并在那里执行上述步骤。

请建议我应该如何使用 Room 数据库设置图书馆

这是我的项目结构和库

  1. 在你的模块中创建 DatabaseManager 单例 class。使用 @JvmStatic 帮助您从 Java 呼叫而无需 Companion
class DatabaseManager private constructor(private val dp: AppDatabase) {
    fun loadData() : List<OfflineData> {
        return dp.getOfflineDataDao().loadAll() // I assume you already defined loadAll method in DAO
    }

    companion object {
        @Volatile
        private var INSTANCE: DatabaseManager? = null

        @JvmStatic
        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. 在您需要使用数据库的其他模块中,您必须在 gradle 中实现 offlineservicelibrary 并在调用时将上下文传递给它
DatabaseManager.getInstance(context).loadData()