Я использую постоянную библиотеку комнаты , чтобы сохранить некоторые данные.Мне нужно получить доступ к данным из двух разных мест (скажем, действия).Но в обоих действиях я получаю разные результаты.
Если я запускаю 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()
возвращает разные значения .. Я допустил ошибку при печати значений.