会议室在每次活动中返回不同的结果

时间:2018-10-14 19:23:28

标签: android android-room

我正在使用room persistence library保存一些数据。我需要从两个不同的地方访问数据(比方说活动)。但是在这两种活动中我得到的结果都不一样。

如果我在活动 A 中运行INSERT,在活动 A 中运行SELECT *,则可以看到插入的内容。如果我在活动 B 中运行SELECT *,则看不到我在活动 A 中插入的内容。活动 B 也是如此:如果我在活动 B 中运行INSERT,在活动 B 中运行SELECT * ,我可以看到我插入的内容。如果我在活动 A 中运行SELECT *,则看不到我在活动 B 中插入的内容。

我正在使用单例模式来创建数据库实例:

@Database(entities = [SharedFile::class], version = 3)
@TypeConverters(SharedFileTypesConverter::class)
abstract class AppDatabase : RoomDatabase() {

    abstract fun sharedFileDao(): SharedFileDao

    companion object {

        private var INSTANCE: AppDatabase? = null
        const val DB_NAME = "db-name.db"

        fun getInstance(context: Context): AppDatabase? {
            (if (INSTANCE == null) "null" else "not null").logDebug() // Prints null the first time and then not null every other time - so thats seems to work nice
            if (INSTANCE == null) {
                synchronized(AppDatabase::class) {
                    INSTANCE = Room.databaseBuilder(
                        context.applicationContext,
                        AppDatabase::class.java,
                        DB_NAME
                    )
                        .fallbackToDestructiveMigration()
                        .build()
                }
            }

            return INSTANCE
        }

        fun destroyInstance() {
            INSTANCE = null
        }

    }

}

在两个活动 A B 中:

getDatabasePath(AppDatabase.DB_NAME).logDebug()  // Returns the same path in both activities
AppDatabase.getInstance(context)?.sharedFileDao()?.getAll() // Returns different results for each activity

我迷路了。我想不出为什么它不起作用的原因。起初,我认为可能是由于上下文的原因,这就是为什么我记录数据库路径的原因,但是在两种情况下都是相同的……而且单例似乎也很好。

如果两个活动都使用同一实例,那么它们如何返回不同的结果?

编辑:已解决 getDatabasePath()返回不同的值。打印值时我犯了一个错误。

0 个答案:

没有答案