Комната возвращает разные результаты в каждой деятельности - PullRequest
0 голосов
/ 14 октября 2018

Я использую постоянную библиотеку комнаты , чтобы сохранить некоторые данные.Мне нужно получить доступ к данным из двух разных мест (скажем, действия).Но в обоих действиях я получаю разные результаты.

Если я запускаю INSERT в упражнении A и SELECT * в упражнении A , я вижу, чтоЯ вставил.Если я запускаю SELECT * в упражнении B , я не вижу, что я вставил в упражнение A .И то же самое касается действия B : если я запускаю INSERT в действии B и SELECT * в действии B , я вижу то, что вставил,Если я запускаю SELECT * в упражнении A , я не вижу, что я вставил в упражнении B .

Я использую шаблон синглтона для создания экземпляра db:

@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() возвращает разные значения .. Я допустил ошибку при печати значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...