Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
预播种室数据库不工作,但已在Kotlin中创建数据库_Kotlin_Android Room - Fatal编程技术网

预播种室数据库不工作,但已在Kotlin中创建数据库

预播种室数据库不工作,但已在Kotlin中创建数据库,kotlin,android-room,Kotlin,Android Room,我正在尝试使用Room数据库在Kotlin中预设定数据库种子。当我构建并运行它并且创建了数据库时,它不会给我任何错误,但它不是种子 这是我的密码: 票价矩阵.kt import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "fare_matrix") data class FareMatrix( @PrimaryKey var id: Int = 0,

我正在尝试使用Room数据库在Kotlin中预设定数据库种子。当我构建并运行它并且创建了数据库时,它不会给我任何错误,但它不是种子

这是我的密码:

票价矩阵.kt

import androidx.room.Entity
import androidx.room.PrimaryKey

@Entity(tableName = "fare_matrix")
data class FareMatrix(
    @PrimaryKey
    var id: Int = 0,
    val entry_plaza: Int? = null,
    val exit_plaza: Int? = null,
    val classification: Int? = null,
    val amt_total: Int? = null,
    val vat: Double? = null,
    val payment_mode: Int? = null
)
票价矩阵dao

import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query

@Dao
interface FareMatrixDao {
    @Insert
    fun addFareMatrix(fareMatrix: List<FareMatrix>)
}

我怎样才能让它工作呢?

也许你可以试试kotlin合作项目。到目前为止,您的代码是好的,但在插入数据的过程中可能有一些格式不好的地方。因此,我建议您使用kotlinx.coroutines,并在最后的invoke方法中使用类似

   operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
      instance ?: buildDatabase(context).also {
            instance = it

      GlobalScope.launch {
            val POPULATED_FAREMATRIX_DATA = listOf<FareMatrix>(
            FareMatrix(1,800,803,1,30,3.21,1),
            FareMatrix(2,800,803,2,75,8.04,1),
            FareMatrix(3,800,803,3,90,9.64,1),
            FareMatrix(4,800,805,1,58,6.21,1),
            FareMatrix(5,800,805,2,145,15.54,1)
        )
           POPULATED_FAREMATRIX_DATA.forEach { something -> it.getFareMatrixDao().addFareMatrix(something) }
     }
 }}
操作符乐趣调用(上下文:上下文)=实例?:已同步(锁定){
实例?:构建数据库(上下文)。另外{
实例=它
环球镜发射{
val填充的成本矩阵数据=列表(
票价矩阵(1800803,1,30,3.21,1),
票价矩阵(2800803,2,75,8.04,1),
票价矩阵(3800803,3,90,9.64,1),
票价矩阵(4800805,1,58,6.21,1),
票价矩阵(5800805,2145,15.54,1)
)
填充的\u FAREMATRIX\u DATA.forEach{something->it.getFareMatrixDao().addFareMatrix(something)}
}
}}
这应该很管用。其他一切看起来都很好

编辑:而您的构建数据库方法应以
.fallbackToDestructiveMigration().build()。您不需要添加任何其他内容

也许您可以尝试使用kotlin协同程序。到目前为止,您的代码是好的,但在插入数据的过程中可能有一些格式不好的地方。因此,我建议您使用kotlinx.coroutines,并在最后的invoke方法中使用类似

   operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
      instance ?: buildDatabase(context).also {
            instance = it

      GlobalScope.launch {
            val POPULATED_FAREMATRIX_DATA = listOf<FareMatrix>(
            FareMatrix(1,800,803,1,30,3.21,1),
            FareMatrix(2,800,803,2,75,8.04,1),
            FareMatrix(3,800,803,3,90,9.64,1),
            FareMatrix(4,800,805,1,58,6.21,1),
            FareMatrix(5,800,805,2,145,15.54,1)
        )
           POPULATED_FAREMATRIX_DATA.forEach { something -> it.getFareMatrixDao().addFareMatrix(something) }
     }
 }}
操作符乐趣调用(上下文:上下文)=实例?:已同步(锁定){
实例?:构建数据库(上下文)。另外{
实例=它
环球镜发射{
val填充的成本矩阵数据=列表(
票价矩阵(1800803,1,30,3.21,1),
票价矩阵(2800803,2,75,8.04,1),
票价矩阵(3800803,3,90,9.64,1),
票价矩阵(4800805,1,58,6.21,1),
票价矩阵(5800805,2145,15.54,1)
)
填充的\u FAREMATRIX\u DATA.forEach{something->it.getFareMatrixDao().addFareMatrix(something)}
}
}}
这应该很管用。其他一切看起来都很好

编辑:而您的构建数据库方法应以 .fallbackToDestructiveMigration().build()。您不需要添加任何其他内容

 @Insert
    fun addFareMatrix(fareMatrix: FareMatrix)
   operator fun invoke(context: Context) = instance ?: synchronized(LOCK) {
      instance ?: buildDatabase(context).also {
            instance = it

      GlobalScope.launch {
            val POPULATED_FAREMATRIX_DATA = listOf<FareMatrix>(
            FareMatrix(1,800,803,1,30,3.21,1),
            FareMatrix(2,800,803,2,75,8.04,1),
            FareMatrix(3,800,803,3,90,9.64,1),
            FareMatrix(4,800,805,1,58,6.21,1),
            FareMatrix(5,800,805,2,145,15.54,1)
        )
           POPULATED_FAREMATRIX_DATA.forEach { something -> it.getFareMatrixDao().addFareMatrix(something) }
     }
 }}