2016-06-26 30 views
0

有沒有fromto方法來從數據庫中選擇數據領域,當我嘗試使用between(),我得到一個不必要的項目在結果的結尾,所以我想刪除它後得到它複製到新的listObjectUnsupportedOperationException當刪除RealmResult的副本

但即使在複製它在另一個列表對象後,我無法刪除realmResult中的最後一項。

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()); 

但我得到的錯誤說unsupportedOperationException。

我的日誌貓看起來像這樣

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) 

回答

1

您應該構建一個查詢來排除不需要的,而不是稍後將其刪除。

試試這個:

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

謝謝你這麼多:) – erluxman

0

你不能這樣做List<CalendarDto> currentList = currentMonthDTOList;作爲currentMonthDTOListRealmResults<CalendarDto>而不是List<CalendarDto>

如果你想刪除的最後一個對象,你可以做(​​documentation) :

currentMonthDTOList.deleteLastFromRealm(); 

因爲你不想從數據庫中刪除對象,你可以使ac結果到List的OPY與它進行操作:

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

但是,這將從數據庫的太對了刪除特定行?那在我的情況下是不可接受的,有什麼辦法可以從我得到的結果中刪除最後一個? – erluxman

+0

是的,這也會從數據庫中刪除ir。你在使用什麼realm版本? – antonio

+0

這是最近發佈的穩定版 – erluxman

0

,而不是試圖複製到List你可以嘗試這樣複製到RealmList

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

雖然我見過這個工作的人,我必須在這裏引用Realm.io news

工作在進展

雖然我們現在正在爲RxJava提供初始支持,但我們仍然缺乏對RealmQueryRealmList的可觀察支持。這些將在未來更新中添加。

此外,您可以嘗試新的copyFromRealm()方法並使用copyToRealmOrUpdate()方法更新數據庫。