2016-06-26 12 views
0

Es gibt keine from oder to Methode, um Daten von der DB in Realm zu wählen, wenn ich versuche, between() zu verwenden, ich ein unnötiges Element am Ende des Ergebnisses erhalten, so will ich es löschen, nachdem immer seine kopiere auf neu listObject.UnsupportedOperationException beim Löschen Kopie RealmResult

Aber auch nachdem ich eine Kopie davon in einem anderen Listenobjekt erstellt habe, kann ich das letzte Element in realmResult nicht löschen.

RealmResults<CalendarDto> currentMonthDTOList = Realm.getDefaultInstance().where(CalendarDto.class).between("primaryDayId", startingDayPrimaryKey, endingDayPrimaryKey).findAll().sort("primaryDayId", Sort.ASCENDING); 
List<CalendarDto> currentList = currentMonthDTOList; 
currentList.remove(currentList.size()); 

Aber ich bekomme den Fehler, der unsupportedOperationException sagt.

Meine log Katze sieht aus wie dieses

FATAL EXCEPTION: main 
    Process: com.toyanathpatro.gurkha, PID: 17714 
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.toyanathpatro.gurkha/com.toyanathpatro.gurkha.activities.DashBoardActivity}: java.lang.ClassCastException: io.realm.RealmResults cannot be cast to java.util.ArrayList 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    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) 
    Caused by: java.lang.ClassCastException: io.realm.RealmResults cannot be cast to java.util.ArrayList 
    at com.toyanathpatro.gurkha.fragments.GridCalendarFragment.fetchData(GridCalendarFragment.java:84) 
    at com.toyanathpatro.gurkha.fragments.GridCalendarFragment.onCreateView(GridCalendarFragment.java:42) 
    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1974) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1252) 
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:742) 
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) 
    at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:339) 
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:601) 
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1237) 
    at android.app.Activity.performStart(Activity.java:6253) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2379) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
    at android.app.ActivityThread.-wrap11(ActivityThread.java) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    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) 

Antwort

1

Sie sollten eine Abfrage erstellen, um die unerwünschte auszuschließen, anstatt sie später zu entfernen.

Try this:

RealmResults<CalendarDto> results = Realm.getDefaultInstance().where(CalendarDto.class) 
    .greaterThanOrEqualTo("primaryDayId", startingDayPrimaryKey) 
    .lessThan("primaryDayId", endingDayPrimaryKey) 
    .findAll().sort("primaryDayId", Sort.ASCENDING); 
+0

danke so viel :) – erluxman

0

Sie nicht List<CalendarDto> currentList = currentMonthDTOList; als currentMonthDTOList tun kann eine RealmResults<CalendarDto> ist und kein List<CalendarDto>

Wenn Sie das letzte Objekt entfernen möchten Sie tun können (documentation) :

currentMonthDTOList.deleteLastFromRealm(); 

Da Sie das Objekt nicht aus der Datenbank entfernen möchten, können Sie ac opy der Ergebnisse in eine List und mit ihm arbeiten:

List<CalendarDto> dtos = new ArrayList<>(); 
dtos.addAll(currentMonthDTOList); 
dtos.remove(dtos.size()); 
+0

Aber das wird, dass bestimmte Zeile aus der Datenbank entfernen rechts? das ist in meinem Fall nicht akzeptabel, gibt es eine Möglichkeit, die letzte aus dem Ergebnis, das ich bekommen habe, zu entfernen? – erluxman

+0

Ja, dies wird auch ir aus der Datenbank entfernen. Welche Realm Version verwendest du? – antonio

+0

Es ist die stabile Version kürzlich veröffentlicht – erluxman

0

Statt auf eine List zu kopieren versuchen, können Sie versuchen, so zu einem RealmList zu kopieren:

RealmList <CalendarDto> currentList = new RealmList<CalendarDto>(); 
currentList.addAll(yourRealmResults.subList(0, yourRealmResults.size())); 

Obwohl ich gesehen habe diese Funktion ist für Leute, ich muss Realm.io news hier zitieren:

Work-in-progress

Während wir die anfängliche Unterstützung für RxJava jetzt verschicken, fehlt uns noch die beobachtbare Unterstützung für RealmQuery und RealmList. Diese werden in einem zukünftigen Update hinzugefügt.

Zusätzlich können Sie die neue copyFromRealm() Methode versuchen, die DB aktualisieren copyToRealmOrUpdate() Methode.

Verwandte Themen