当前位置: 首页 > 知识库问答 >
问题:

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

魏鸿禧
2023-03-14

我有一个现有的Android项目,在其中我创建了一个新的Android library(offlineservicelibrary)(文件/new/new module/Android library)。在这个库中,我想创建一个房间数据库。

我遵循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类的新类,并在那里执行上述步骤。

请建议我应该做什么,以获得图书馆设置与房间数据库请

这是我与库的项目结构

共有1个答案

贺玉石
2023-03-14
  1. 在模块中创建DatabaseManager单例类。使用@jvmstatic帮助您在没有同伴
  2. 的情况下从Java调用
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 }
                }
            }
        }
    }
}
DatabaseManager.getInstance(context).loadData()
 类似资料:
  • 错误:查询有问题:[SQLITE_ERROR]SQL错误或缺少数据库(没有这样的表:任务) 显示了这个错误,我怎么可能修复它? 我正在学习这个教程

  • 我正在迁移一个运行在Android上的现有应用程序,并正在将其迁移到Raspberry Pi。只是想知道是否有可能直接迁移Room数据库的使用。

  • BidsItem类 如果有人告诉我我需要做什么,或者至少向什么方向前进,我将非常感激

  • 并且我发现了基于数据库版本4的可能场景的迁移varargs。 我的问题是,假设我使用的是db v1的Room,当我的应用程序到达db v10时,我将不得不编写多少迁移方法? 在sqlite中,我们在中获得已安装应用程序的当前db版本,我们只需通过开关大小写而不使用break语句,以便满足所有db升级。

  • 我是新来的和我试图我的得到一个从它。我试图这样做的它与这是id但问题是我不知道如何返回目标从。 这就是<代码>刀 这是Repository类

  • 我是Android的新手,需要一些帮助。 我的问题是我到底什么时候调用命令,以及room如何知道哪一行发生了更改?我不想更新到整个表。 如果我应该用另一种方式解释,请告诉我。