Android room - ID 值在每次应用测试时重复 运行

Android room - ID value get duplicate on each app test run

我知道有很多与我类似的问题,但对于我的情况,none 个问题有效!
我有 4 列的 table,我为我的 ID 设置了 @PrimaryKey(autoGenerate = true) private int id;,为我的其他 3 列设置了 @index unique,像这样:

@Entity(tableName = "Data" ,
        indices = {@Index(value = {"name","data","label"}, unique = true)})

public class Data {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String name;
    private String data;
    private String label;

    public Data(String name, String data, String label) {
        this.name = name;
        this.data = data;
        this.label = label;

    }

并且对于我的 Dao,我已经为我的插入查询设置了 (onConflict = OnConflictStrategy.REPLACE),也应该说我已经用 OnConflictStrategy.IGNORE 进行了测试,它甚至没有显示 Table在应用程序启动中:

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insert(Data data);

最后在我的 MainActivity class 中,我的字符串数据是我的插入方法旁边的二维数组:

db = AppDatabase.getAppDatabase(this);
dataDao = db.getDataDao();
ArrayList<Data> dataList = new ArrayList<>();

try {
    for (int i = 0; i < stringData.length;) {
        data = new Data(stringData[i][0],stringData[i][1],stringData[i][2]);
        dataDao.insert(data);
        i++;
    }

}catch (Exception e){
    Log.e(TAG, "onCreate: ", e);
}

我已经多次测试和调试我的应用程序,唯一得到的是我忘记增加的版本号错误! 在下图中,您可以看到我的 ID 重复了,它是从 687 开始的!

enter image description here

你可以从 Here 看到我的字符串数据,虽然我已经检查了它的服务时间是否为空或缺失部分,但我找不到任何。

根据您在问题中链接到的字符串数据,只有 686 个最上面的元素需要插入。

似乎已经发生的事情是,存在一些已被 替换的行 从而有效地增加了 id 但也留下了空白,因此为什么您的屏幕截图显示更多但很可能是差距。例如 运行 代码第二次生成 ID 为 687-1372 的行。

这是使用 :-

确定的
    try {
        Log.d(TAG,"Trying to insert " + TestData.stringData.length + " rows"); //<<<<<<<<< ADDED
        for (int i = 0; i < TestData.stringData.length;) {
        ....

此外,第 216 行有一个问题,它只有 2 个参数,而不是必需的 3 个。为了避免这种情况,我使用了 :-

{" گردش زمین (Earth's velocity)", "0.0000335965","??????????"}, //<<<<<<<<<< only 2 values added ??????????

使用您的数据并固定以上行并使用 App Inspection 最后一行是:-

我建议卸载应用程序并在修改错误的第 216 行(见下文)后重试。我还建议使用 OnConflictStrategy.IGNORE 并利用:-

@Insert(onConflict = OnConflictStrategy.IGNORE)
long insertIgnore(Data data);

如果插入返回的值为 -1,则由于 UNIQUE 约束,该行不会被插入。

我在制作 table 时遇到的新错误:

2022-03-03 16:17:29.382 27696-27707/com.mohajer.kitset A/libc: Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x10 in tid 27707 (HeapTaskDaemon), pid 27696 (.mohajer.kitset)

enter image description here