Kotlin 房间:添加一个额外的列
我正在使用Room/Kotlin创建一个应用程序,希望添加一个附加列,但无法显示第二列。应用程序在模拟器上工作,但不会正确显示数据,即pb,然后是该pb的值。它将只显示第一列 刀 分贝Kotlin 房间:添加一个额外的列,kotlin,android-room,Kotlin,Android Room,我正在使用Room/Kotlin创建一个应用程序,希望添加一个附加列,但无法显示第二列。应用程序在模拟器上工作,但不会正确显示数据,即pb,然后是该pb的值。它将只显示第一列 刀 分贝 您是否更新了数据库版本?你能用日志错误编辑这篇文章吗?@Shermano我刚刚用数据库和日志错误更新了这篇文章。你能把数据库类的版本改为2并检查是否有效吗?您发布的日志似乎与实际日志无关error@Shermano谢谢,我试过了,但还是不能正常工作。我现在没有任何错误,但无法显示第二列。我想我缺少了第二列的一些代
您是否更新了数据库版本?你能用日志错误编辑这篇文章吗?@Shermano我刚刚用数据库和日志错误更新了这篇文章。你能把数据库类的版本改为2并检查是否有效吗?您发布的日志似乎与实际日志无关error@Shermano谢谢,我试过了,但还是不能正常工作。我现在没有任何错误,但无法显示第二列。我想我缺少了第二列的一些代码。我编辑了这篇文章以提供更多详细信息。您的代码似乎没有问题,您插入了新值,并且新列在GetAlphapozeDPB()上没有返回?您是否更新了数据库版本?你能用日志错误编辑这篇文章吗?@Shermano我刚刚用数据库和日志错误更新了这篇文章。你能把数据库类的版本改为2并检查是否有效吗?您发布的日志似乎与实际日志无关error@Shermano谢谢,我试过了,但还是不能正常工作。我现在没有任何错误,但无法显示第二列。我想我缺少了第二列的一些代码。我编辑了这篇文章以提供更多细节。您的代码似乎没有问题,您插入了新值,并且新列在GetAlphaozeDPB()上没有返回?
@Dao
interface PbDao {
@Query("SELECT * from pb_table ORDER BY pb ASC")
fun getAlphabetizedPbs(): LiveData<List<Pb>>
@Insert(onConflict = OnConflictStrategy.IGNORE)
suspend fun insert(pb: Pb)
@Query("DELETE FROM pb_table")
suspend fun deleteAll()
}
@Entity(tableName = "pb_table")
data class Pb(
@PrimaryKey//(autoGenerate = true) var uid:Int = 0,
@ColumnInfo(name = "pb") val pb: String = "",
@ColumnInfo(name = "pb_value") val pb_value: Double = 0.0)
@Database(entities = [Pb::class], version = 1, exportSchema = false)
abstract class PersonalBestDatabase : RoomDatabase() {
abstract fun pbDao(): PbDao
companion object {
@Volatile
private var INSTANCE: PersonalBestDatabase? = null
fun getDatabase(
context: Context,
scope: CoroutineScope
): PersonalBestDatabase {
// if the INSTANCE is not null, then return it,
// if it is, then create the database
return INSTANCE ?: synchronized(this) {
val instance = Room.databaseBuilder(
context.applicationContext,
PersonalBestDatabase::class.java,
"pb_database"
)
.fallbackToDestructiveMigration()
.addCallback(PbDatabaseCallback(scope))
.build()
INSTANCE = instance
instance
}
}
private class PbDatabaseCallback(
private val scope: CoroutineScope
) : RoomDatabase.Callback() {
override fun onOpen(db: SupportSQLiteDatabase) {
super.onOpen(db)
INSTANCE?.let { database ->
scope.launch {
populateDatabase(database.pbDao())
}
}
}
}
suspend fun populateDatabase(pbDao: PbDao) {
pbDao.deleteAll()
var pb = Pb("Squat", 120.0)
pbDao.insert(pb)
pb = Pb("Bench Press", 65.0)
pbDao.insert(pb)
pb = Pb("Deadlift", 142.5)
pbDao.insert(pb)
}
}
}