Reputation: 15646
Android Studio 3.2. , Realm 4.1.0
I need to delete all items in list from Realm.
My snippet:
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");
}
}
But on runtime I get error in this line :
localMerchantRealmList.deleteAllFromRealm();
Here error:
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)
Upvotes: 0
Views: 400
Reputation: 12079
When you convert RealmResults
to RealmList
with
RealmList<Merchant> realmList = new RealmList<>();
realmList.addAll(realmResults.subList(0, realmResults.size()));
you created an unmanaged version of your data, meaning the objects in the list are not connected to the database anymore and are basically normal Java objects.
You will have to keep a reference of RealmResults
and delete from it.
Upvotes: 2