realm-java: Cannot delete an Realm object
#model `@RealmClass public class sample implements RealmModel, IPrimaryKey{}
public interface IPrimaryKey { String getPrimaryKey();
void setPrimaryKey(String key);
}`
Goal
I was creating a library to combine realm and firebase . I want to delete an object from realm. `final T result = realm.where(modelClass) .equalTo(primaryKey, dataSnapshot.getKey()) .findFirst();
if (RealmObject.isValid(result)) {
realm.executeTransaction(new Realm.Transaction() {
@Override
public void execute(Realm realm) {
RealmObject.deleteFromRealm(result);
}
});
}`
Expected Results
The object should have been deleted.
?
Actual Results
Instead i get
FATAL EXCEPTION: main Process: com.spar.chillout, PID: 3592 Theme: themes:{com.android.dialer=overlay:org.cyanogenmod.hexolibre, default=overlay:system, iconPack:system, fontPkg:system, com.android.systemui=overlay:system, com.android.systemui.navbar=overlay:system} java.lang.IllegalArgumentException: Object not managed by Realm, so it cannot be removed. at io.realm.RealmObject.deleteFromRealm(RealmObject.java:97) at com.spar.chillout.firebase.RealmFirebaseArray$3.execute(RealmFirebaseArray.java:85) at io.realm.Realm.executeTransaction(Realm.java:1255) at com.spar.chillout.firebase.RealmFirebaseArray.onChildRemoved(RealmFirebaseArray.java:82) at com.google.android.gms.internal.zzajg.zza(Unknown Source) at com.google.android.gms.internal.zzalg.zzcxk(Unknown Source) at com.google.android.gms.internal.zzalj$1.run(Unknown Source) 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:5461) 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)
Version of Realm and tooling
Realm version(s): 2.1.1
Realm sync feature enabled: no
Android Studio version: android 2.3.3 Android gradle 2.2.2
Android version Marshmallow
About this issue
- Original URL
- State: closed
- Created 8 years ago
- Comments: 22 (10 by maintainers)
As a workaround i have changed the query to `@Override public void onChildRemoved(DataSnapshot dataSnapshot) { final T t = dataSnapshot.getValue(modelClass);
Now it works ! Because the RealmResults have a primary key , it doesn’t matter if i use results or a single result. But i don’t know why single query returned an unmanaged object.
You’re deleting an unmanaged object, and not a managed RealmObject.