2016-06-26 26 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()方法更新数据库。