错误崩溃 房间由以下原因引起: android.database.sqlite.SQLiteConstraintExce



Room 无法验证数据完整性。看起来您更改了架构,但忘记更新版本号。您可以通过增加版本号来简单地解决此问题。

产品.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(( ################################################################# at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:704( at io.reactivex.internal.functions.Functions$OnErrorMissingConsumer.accept(Functions.java:701( at io.reactivex.internal.observers.LambdaObserver.onError(LambdaObserver.java:77( at io.reactivex.internal.operator.observable.ObservableObserveOn$ObserveOnObserver.checkTerminated(ObservableObserveOn.java:281( at io.reactivex.internal.operator.observable.ObservableObserveOn$ObserveOnObserver.drainNormal(ObservableObserveOn.java:172( at io.reactivex.internal.operator.observable.ObservableObserveOn$ObserveOnObserver.run(ObservableObserveOn.java:255( at io.reactivex.internal.schedulers.ScheduledRunnable.run(ScheduledRunnable.java:66( at io.reactivex.internal.schedulers.ScheduledRunnable.call(ScheduledRunnable.java:57( at java.util.concurrent.FutureTask.run(FutureTask.java:237( at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:272( at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133( at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607( at java.lang.Thread.run(Thread.java:762( 由以下原因引起:android.database.sqlite.SQLiteConstraintException:UNIQUE 约束失败:products.id(代码 1555( ################################################################# 错误代码 : 1555 (SQLITE_CONSTRAINT_PRIMARYKEY( 原因:由于违反约束而中止。 (唯一约束失败:products.id(代码 1555((

实际上你违反了主键唯一性。所以你得到错误:

错误代码:1555 (SQLITE_CONSTRAINT_PRIMARYKEY( 由 : 由于中止而中止 违反约束。(唯一约束失败:products.id(代码 1555((

我发现您的数据类具有主键,其引用是"id"。但是你通过构造函数传递 id。但是您确定每次通过构造函数将 id 传递为唯一时吗?我认为没有。因此,请确保将id作为唯一值传递。

相关内容

最新更新