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 数据库设置图书馆
这是我的项目结构和库
- 在你的模块中创建
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 }
}
}
}
}
}
- 在您需要使用数据库的其他模块中,您必须在
gradle
中实现 offlineservicelibrary
并在调用时将上下文传递给它
DatabaseManager.getInstance(context).loadData()
我有一个现有的 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 数据库设置图书馆
这是我的项目结构和库
- 在你的模块中创建
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 }
}
}
}
}
}
- 在您需要使用数据库的其他模块中,您必须在
gradle
中实现offlineservicelibrary
并在调用时将上下文传递给它
DatabaseManager.getInstance(context).loadData()