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
我知道有很多与我类似的问题,但对于我的情况,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