android 房间数据库使用hilt和persist数据预填充数据库[重复]

9udxz4iz  于 2023-04-18  发布在  Android
关注(0)|答案(1)|浏览(142)

此问题已在此处有答案

Room.createFromAsset() rewrite app's database every time the app is opened(1个答案)
19小时前关闭
我正在使用hilt数据库onCreate方法预填充应用程序数据库,到目前为止一切都很好。我有一个问题,我的应用程序不会在数据库中保存更新的数据。我相信预填充数据库正在发生并重置数据或其他我不知道的东西。只要应用程序正在运行或在后台,数据就会保持更新,从后台删除并重新开始重置所有内容,就像question一样。
我需要一种方法来持久化我的应用程序中编辑或更新的数据,并在应用程序安装后只填充一次数据。
用于预填充数据表创建语句:

CREATE TABLE words (id INTEGER PRIMARY KEY, en TEXT, pl TEXT, speech TEXT)

实体:

@Entity(tableName = "words")
data class MyEntity (
    @PrimaryKey
    @ColumnInfo(name = "id")val id: Int,
    @ColumnInfo(name = "en") val englishWord: String?,
    @ColumnInfo(name = "pl") val polishWord: String?,
    @ColumnInfo(name = "speech") val speech: String?
)

刀柄供应商:

@Provides
@Singleton
fun provide(@ApplicationContext context: Context) = Room.databaseBuilder(
    context, AppDatabase::class.java, MY_DATABASE)
    .createFromAsset("database/database.db")
    //.allowMainThreadQueries()
    .fallbackToDestructiveMigration()
    .build()

DAO:

@Query("SELECT * FROM words")
fun getAll(): LiveData<List<MyEntity>>

@Update
fun updateThat(ent: MyEntity)

在这里,使用更新后,它显示在那一刻更新,只要应用程序停留在后台,但重新启动后,更新就消失了。

更新:我在here找到了解决方案。

2mbi3lxu

2mbi3lxu1#

应用中的数据库模式版本是否与资产database/database.db的版本不同?
您已经启用了fallbackToDestructiveMigration,它将在每次模式更改时重新创建数据库,如文档中所定义:
https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Builder#fallbacktodestructivemigration

相关问题