会议室:增加一列

时间:2019-08-07 15:08:35

标签: kotlin android-room

我正在使用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)

        }
    }
}

0 个答案:

没有答案