【问题标题】:Error Inserting : NOT NULL constraint failed: (code 1299) in Room Database插入错误:NOT NULL 约束失败:(代码 1299)在房间数据库中
【发布时间】:2020-01-06 13:05:15
【问题描述】:

我正在尝试将值插入到我的表中,但每次它给我以下错误,android.database.sqlite.SQLiteConstraintException: NOT NULL constraint failed: UserModel.Id (code 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;
}
}

在将数据插入表时,我使用了 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 不确定是什么导致了这个错误,任何帮助都会很棒

谢谢

【问题讨论】:

  • 您没有在对象中设置 Id 的值。检查您正在使用的 JSON。
  • 我的 Json 和我的 Model 的字段相同
  • 检查该 JSON 中 Id 的值。
  • 只有在签署 apk 时才会收到此错误。在调试版本中它工作正常。
  • Id 的值是随机字符串,我已经很好地检查了响应。我看不到任何空值

标签: android sqlite android-room androidx


【解决方案1】:

欲了解更多信息,您可以查看以下链接ProGuard Rules

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

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

【讨论】:

    【解决方案2】:

    当您创建签名 apk 时,您的 UserModel 类变量已更改。及其插入时的创建问题。 为proguard规则添加以下代码

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

    【讨论】:

      猜你喜欢
      • 2021-10-16
      • 1970-01-01
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-28
      • 2014-12-30
      • 1970-01-01
      相关资源
      最近更新 更多