我正在使用Room / Kotlin创建一个应用程序,并且想添加一列,但是我无法显示第二列。该应用程序可在仿真器上运行,但无法正确显示数据,即pb,然后显示该pb的值。它只会显示第一列。
道
@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()
}
Pb
@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)
db
@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)
}
}
}