我正在使用Realm 5.0.0,我想在一个表中插入对象列表,并且还想从另一个表中删除相同的对象列表。我尝试过使用Thread
和AsyncTask
,但只有一个任务完成,如果我先删除并稍后插入它只执行插入,如果我反转它只会执行删除。
public static void removeSKUList(final ArrayList<SKUItem> skuItems) {
final Thread insertThread = new Thread(new Runnable() {
@Override
public void run() {
Realm realm = Realm.getDefaultInstance();
try {
realm.beginTransaction();
realm.insertOrUpdate(new Memo(String.valueOf(UUID.randomUUID()),
false, System.currentTimeMillis(), skuItems));
realm.commitTransaction();
} finally {
realm.close();
Log.e(TAG, "run: thread2 finished");
}
}
});
Thread deleteThread = new Thread(new Runnable() {
@Override
public void run() {
Realm realm = Realm.getDefaultInstance();
try {
RealmQuery<SKUItem> query = realm.where(SKUItem.class);
int i = 0;
for (SKUItem id : skuItems) {
if (i++ > 0) {
query = query.or();
}
query = query.equalTo("sku_number", id.getSku_number());
}
realm.beginTransaction();
RealmResults<SKUItem> skuItems1 = query.findAll();
skuItems1.deleteAllFromRealm();
realm.commitTransaction();
realm.refresh();
} finally {
realm.close();
insertThread.start();
}
}
});
deleteThread.start();
}
输出:
E / RealmManager:run:thread finished
E / RealmManager:运行:thread2完成
但是最后只更新了一张桌子......
更新
final Realm realm = Realm.getDefaultInstance();
try {
final RealmResults<SKUItem> students = realm.where(SKUItem.class).findAll();
Memo memo = new Memo(String.valueOf(UUID.randomUUID()),
false, System.currentTimeMillis(), temStockItems);
realm.beginTransaction();
realm.insertOrUpdate(memo);
realm.commitTransaction();
for (SKUItem temStockItem : temStockItems) {
SKUItem skuItem = students.where().equalTo("sku_number", temStockItem.getSku_number()).findFirst();
if (skuItem != null) {
realm.beginTransaction();
skuItem.deleteFromRealm();
realm.commitTransaction();
}
}
} finally {
realm.close();
}
答案 0 :(得分:0)
try(Realm r = Realm.getDefaultInstance()) {
r.executeTransaction((realm) -> {
RealmQuery<SKUItem> query = realm.where(SKUItem.class);
int i = 0;
for (SKUItem id : skuItems) {
if (i++ > 0) {
query = query.or();
}
query = query.equalTo("sku_number", id.getSku_number());
}
query.findAll().deleteAllFromRealm();
realm.insertOrUpdate(new Memo(String.valueOf(UUID.randomUUID()),
false, System.currentTimeMillis(), skuItems));
});
}