错误插入:NOT NULL 约束失败:(代码 1299)在房间数据库中

Error Inserting : NOT NULL constraint failed: (code 1299) in Room Database

我正在尝试将值插入我的 table,但每次它都会给我以下错误,android.database.sqlite.SQLiteConstraintException:NOT NULL 约束失败:UserModel.Id(代码 1299)。很奇怪,相同的代码在 debug build 中工作,但是当它是 signed apk 时,它给了我这样的错误。

我的用户模型看起来像这样:

@Entity
public class UserModel {
@PrimaryKey
@NonNull
String Id;
String Fname,Sname;

@NonNull
public String getId() {
    return Id;
}

public void setId(@NonNull String id) {
    Id = id;
}

public String getFname() {
    return Fname;
}

public void setFname(String fname) {
    Fname= fname;
}

public String getSname() {
    return Sname;
}

public void setSname(String sname) {
    Sname= sname;
}
}

在将数据插入 table 时,我使用了 Gson,它看起来像:

     JSONArray payloadArray = new JSONArray(response);
     Type type = new TypeToken<List<UserModel>>() {}.getType();
     List<UserModel> userList = new Gson().fromJson(payloadArray.toString(), type);
     database.userDao().insertData(userList);

在我的构建变体中,我设置了以下内容:

   storeFile file('E:\KeystoreFile\Sample.jks')
   ------------------------------------------------------------------
   debug {
        minifyEnabled false
        debuggable true
        initWith debug
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        buildConfigField "String", "SERVER_URL", project.properties["server.url"]
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'

        signingConfig signingConfigs.config
        manifestPlaceholders = [
                appIcon: "@mipmap/ic_launcher"
        ]

        applicationIdSuffix ".qa"

    }

我的房间版本是 2.0.0。我厌倦了最新版本 2.2.3 和其他版本,似乎也没有做任何事情。而且我已经迁移到 Androidx 不确定是什么导致了这个错误,任何帮助都会很好

谢谢

当您创建签名 apk 时,您的 UserModel class 变量发生了变化。及其在插入时产生的问题。 为 proguard 规则添加以下代码

-keep class * extends androidx.room.RoomDatabase
-dontwarn androidx.room.paging.**
-keepattributes Signature, InnerClasses, EnclosingMethod
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations

更多信息您可以查看以下link ProGuard Rules

针对我的问题,我将 proGuard 规则设置为:

-keep class  app.mypackage.model.** { *; }