此问题已在此处有答案:
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找到了解决方案。
1条答案
按热度按时间2mbi3lxu1#
应用中的数据库模式版本是否与资产
database/database.db
的版本不同?您已经启用了
fallbackToDestructiveMigration
,它将在每次模式更改时重新创建数据库,如文档中所定义:https://developer.android.com/reference/android/arch/persistence/room/RoomDatabase.Builder#fallbacktodestructivemigration