android - deleteAllFromRealm(RealmList : 此方法仅在托管模式下可用
问题描述
安卓工作室 3.2。, 境界 4.1.0
我需要从领域中删除列表中的所有项目。
我的片段:
public static RealmList<Merchant> getMerchantsRealmList() {
Realm realm = Realm.getDefaultInstance();
try {
RealmResults<Merchant> realmResults = realm.where(Merchant.class).findAll();
RealmList<Merchant> realmList = new RealmList<>();
realmList.addAll(realmResults.subList(0, realmResults.size()));
return realmList;
} finally {
realm.close();
}
}
public static void updateMerchantList(final List<Merchant> thatMerchantsList) {
Realm realm = Realm.getDefaultInstance();
try {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
RealmList<Merchant> localMerchantRealmList = getMerchantsRealmList();
if (!EqualsUtil.areEqualContentLists(localMerchantRealmList, thatMerchantsList)) {
List<Merchant> itemNotExistInThatMerchants = new ArrayList<>(localMerchantRealmList);
itemNotExistInThatMerchants.removeAll(thatMerchantsList);
if (itemNotExistInThatMerchants.size() > 0) {
localMerchantRealmList.removeAll(itemNotExistInThatMerchants);
localMerchantRealmList.deleteAllFromRealm(); // error here
}
}
}
});
} finally {
realm.close();
Debug.d(TAG, "updateMerchantList: finish");
}
}
但是在运行时我在这一行得到错误:
localMerchantRealmList.deleteAllFromRealm();
这里错误:
java.lang.UnsupportedOperationException: This method is only available in managed mode.
at io.realm.RealmList.deleteAllFromRealm(RealmList.java:660)
at com.myproject.customer.service.MerchantService$1.execute(MerchantService.java:107)
at io.realm.Realm.executeTransaction(Realm.java:1393)
at com.myproject.customer.service.MerchantService.updateMerchantList(MerchantService.java:70)
at com.myproject.customer.service.SyncService$1.onSuccess(SyncService.java:49)
at com.myproject.customer.api.DefaultRestClientCallback.onResponse(DefaultRestClientCallback.java:31)
at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:70)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
解决方案
当您转换RealmResults
为RealmList
with
RealmList<Merchant> realmList = new RealmList<>();
realmList.addAll(realmResults.subList(0, realmResults.size()));
您创建了数据的非托管版本,这意味着列表中的对象不再连接到数据库,并且基本上是普通的 Java 对象。
您必须保留对它的引用RealmResults
并从中删除。
推荐阅读
- node.js - 无法为量角器执行“webdriver-manager update”
- javascript - 无法使用 jquery 获取锚标记值
- android - 当左侧的约束项消失时如何保持我的右侧项正确(约束布局)
- apache-spark - SJS 0.9.0 中添加的 CONTEXT_ID 在表中设置为 null
- azure - Azure AD B2C 上的单点注销
- ios - 如何使函数等到使用Objective-C通过BLE接收到来自设备的ACK?
- google-cloud-platform - 为什么启用 Cloud Run API 会创建这么多服务帐号?为什么他们有这么多特权?
- javascript - JQuery 中的计算给出结果“NaN”
- ios - 应用程序不要求照片库使用权限
- c++ - 尝试在树莓派上构建 Qt 项目,为什么会抛出关于 qmake 的错误?