房间无法验证数据完整性。看起来您已更改架构,但忘记更新版本号。您只需增加版本号即可解决此问题。
product.kt
package com.store.bamboo.model.room
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
import com.google.gson.annotations.SerializedName
@Entity(tableName = "products")
data class Product(
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id")
val id: Int,
@SerializedName("name")
@ColumnInfo(name = "name")
var name: String,
@SerializedName("description")
@ColumnInfo(name = "description") var description: String,
@SerializedName("units")
@ColumnInfo(name = "units") var units:Int,
@SerializedName("price")
@ColumnInfo(name = "price") var price: Double,
@SerializedName("off")
@ColumnInfo(name = "off") var off: Double,
@SerializedName("image")
@ColumnInfo(name = "image") var image: String
)
AppDatabase.kt
package com.store.bamboo.model.room
import androidx.room.Database
import androidx.room.RoomDatabase
@Database(entities = arrayOf(Product::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun productDao(): ProductDao
}
错误代码:1555(SQLITE_CONSTRAINT_PRIMARYKEY) 原因:由于违反约束而中止。 (唯一约束失败:products.id(代码1555)) ################################################ ############### 在io.reactivex.internal.functions.Functions $ OnErrorMissingConsumer.accept(Functions.java:704) 在io.reactivex.internal.functions.Functions $ OnErrorMissingConsumer.accept(Functions.java:701) 在io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77) 在io.reactivex.internal.operators.observable.ObservableObserveOn $ ObserveOnObserver.checkTerminated(ObservableObserveOn.java:281) 在io.reactivex.internal.operators.observable.ObservableObserveOn $ ObserveOnObserver.drainNormal(ObservableObserveOn.java:172) 在io.reactivex.internal.operators.observable.ObservableObserveOn $ ObserveOnObserver.run(ObservableObserveOn.java:255) 在io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66) 在io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57) 在java.util.concurrent.FutureTask.run(FutureTask.java:237) 在java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:607) 在java.lang.Thread.run(Thread.java:762) 造成原因:android.database.sqlite.SQLiteConstraintException:唯一约束失败:products.id(代码1555) ################################################ ############### 错误代码:1555(SQLITE_CONSTRAINT_PRIMARYKEY) 原因:由于违反约束而中止。 (唯一约束失败:products.id(代码1555))
答案 0 :(得分:0)
实际上,您违反了主键唯一性。所以你得到了错误:
错误代码:1555(SQLITE_CONSTRAINT_PRIMARYKEY)原因:中止 限制违规行为。 (唯一约束失败:products.id(代码 1555))
我发现您的数据类具有主键,其引用为“ id”。但是您通过构造函数传递id。但是,您确定每次通过构造函数将id传递为唯一ID时都确定吗?我想不是。 因此请确保您传递id
作为唯一值。