0

没有fromto方法可以从 Realm 中的 DB 中选择数据,当我尝试使用 时between(),我在结果末尾得到一个不必要的项目,所以我想在将其复制到 new 后删除它listObject

但即使在另一个列表对象中复制它之后,我也无法删除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)
4

3 回答 3

1

您应该构建一个查询以排除不需要的查询,而不是稍后将其删除。

试试这个:

RealmResults<CalendarDto> results = Realm.getDefaultInstance().where(CalendarDto.class)
    .greaterThanOrEqualTo("primaryDayId", startingDayPrimaryKey)
    .lessThan("primaryDayId", endingDayPrimaryKey)
    .findAll().sort("primaryDayId", Sort.ASCENDING);
于 2016-06-27T03:35:29.653 回答
0

你不能List<CalendarDto> currentList = currentMonthDTOList;currentMonthDTOListaRealmResults<CalendarDto>而不是 aList<CalendarDto>

如果你想删除你可以做的最后一个对象(文档):

currentMonthDTOList.deleteLastFromRealm();

由于您不想从数据库中删除对象,因此可以将结果复制到 a 中List并对其进行操作:

List<CalendarDto> dtos = new ArrayList<>();
dtos.addAll(currentMonthDTOList);
dtos.remove(dtos.size());
于 2016-06-26T10:55:20.727 回答
0

List您可以尝试通过以下方式复制到 a ,而不是尝试复制到 a RealmList

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

虽然我已经看到这对人们有用,但我必须在这里引用Realm.io 新闻

工作正在进行中

虽然我们现在正在提供对 RxJava 的初始支持,但我们仍然缺乏对RealmQuery和的 Observable 支持RealmList。这些将在未来的更新中添加。

此外,您可以尝试新copyFromRealm()方法并使用方法更新数据库copyToRealmOrUpdate()

于 2016-06-26T11:49:52.813 回答