房间失效跟踪器被初始化两次
Room Invalidation tracker is initialized twice
我有一个水平回收器视图,其中包含自定义项目。每个项目都可以保留当前项目在 Recycler 视图中的位置。我想在使用拖放移动项目时更新项目位置。但是,当水平方向超过三个项目时,数据将被删除 view.Please 帮帮我。
Source Code
这就是我得到的 Logcat:
E/ROOM: Invalidation tracker is initialized twice :/.
E/Item moved: Counterfrom3
next item:to2
在onCreate中初始化数据库。
db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DB_NAME)
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build();
RecyclerView 适配器代码。
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
String name = dataSet.get(fromPosition).getName();
//this will make "Add item" do not move from its first position..
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (!(Objects.equals(name, "Add") || (toPosition == 0 && fromPosition == 1))) {
Collections.swap(dataSet, fromPosition, toPosition);
MoveItem(fromPosition, toPosition);
notifyItemMoved(fromPosition, toPosition);
return true;
}
}
return false;
}
移动项目时更新数据的代码。
public static void MoveItem(int fromPosition,int toPosition){
String name = data.get(fromPosition).getName(); //This gets the current item name in the view
String nexName = data.get(toPosition).getName(); //This gets the next item name in the view
ContentValues fromContentValues = new ContentValues();
fromContentValues.put("posItem", toPosition); //adding data to ContentValues
ContentValues toContentValues = new ContentValues();
toContentValues.put("posItem", fromPosition);
Log.e("Item moved", name + "from" + fromPosition + "\n" + "next item:" + "to" + toPosition);
db.beginTransaction();
try {
db.getOpenHelper().getWritableDatabase().update(name,
0, fromContentValues, "posItem =" + fromPosition, null);
db.getOpenHelper().getWritableDatabase().update(nexName,
0, toContentValues, "posItem =" + toPosition, null);
db.setTransactionSuccessful(); //setting Transaction Successful
} finally {
db.endTransaction(); // commit or rollback
db.close(); //closing database
}
}
当我迁移数据库版本时,发生同样的错误 E/ROOM: Invalidation tracker is initialized twice
,终止应用程序,然后重新打开工作。当我开始使用 Room v1.1.0.
但如果我保持一切不变并返回使用 Room v1.0.0,则不会出现此类问题并且一切正常。
所以,可能是 Room v1.1.0 问题
我有一个水平回收器视图,其中包含自定义项目。每个项目都可以保留当前项目在 Recycler 视图中的位置。我想在使用拖放移动项目时更新项目位置。但是,当水平方向超过三个项目时,数据将被删除 view.Please 帮帮我。 Source Code
这就是我得到的 Logcat:
E/ROOM: Invalidation tracker is initialized twice :/.
E/Item moved: Counterfrom3
next item:to2
在onCreate中初始化数据库。
db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, DB_NAME)
.fallbackToDestructiveMigration()
.allowMainThreadQueries()
.build();
RecyclerView 适配器代码。
@Override
public boolean onItemMove(int fromPosition, int toPosition) {
String name = dataSet.get(fromPosition).getName();
//this will make "Add item" do not move from its first position..
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (!(Objects.equals(name, "Add") || (toPosition == 0 && fromPosition == 1))) {
Collections.swap(dataSet, fromPosition, toPosition);
MoveItem(fromPosition, toPosition);
notifyItemMoved(fromPosition, toPosition);
return true;
}
}
return false;
}
移动项目时更新数据的代码。
public static void MoveItem(int fromPosition,int toPosition){
String name = data.get(fromPosition).getName(); //This gets the current item name in the view
String nexName = data.get(toPosition).getName(); //This gets the next item name in the view
ContentValues fromContentValues = new ContentValues();
fromContentValues.put("posItem", toPosition); //adding data to ContentValues
ContentValues toContentValues = new ContentValues();
toContentValues.put("posItem", fromPosition);
Log.e("Item moved", name + "from" + fromPosition + "\n" + "next item:" + "to" + toPosition);
db.beginTransaction();
try {
db.getOpenHelper().getWritableDatabase().update(name,
0, fromContentValues, "posItem =" + fromPosition, null);
db.getOpenHelper().getWritableDatabase().update(nexName,
0, toContentValues, "posItem =" + toPosition, null);
db.setTransactionSuccessful(); //setting Transaction Successful
} finally {
db.endTransaction(); // commit or rollback
db.close(); //closing database
}
}
当我迁移数据库版本时,发生同样的错误 E/ROOM: Invalidation tracker is initialized twice
,终止应用程序,然后重新打开工作。当我开始使用 Room v1.1.0.
但如果我保持一切不变并返回使用 Room v1.0.0,则不会出现此类问题并且一切正常。
所以,可能是 Room v1.1.0 问题