删除RealmResult的副本时出现UnsupportedOperationException

时间:2016-06-26 10:48:18

标签: android list arraylist realm realm-list

没有fromto方法从Realm中的DB中选择数据,当我尝试使用between()时,我在结果的末尾得到一个不必要的项目,所以我想要在将其复制到新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());

但我收到错误说不支持操作异常。

我的日志猫看起来像这样

 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)

3 个答案:

答案 0 :(得分:1)

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

试试这个:

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

答案 1 :(得分:0)

由于List<CalendarDto> currentList = currentMonthDTOList;currentMonthDTOList而不是RealmResults<CalendarDto>

,您无法List<CalendarDto> currentMonthDTOList.deleteLastFromRealm();

如果要删除最后一个对象(documentation):

List

由于您不想从数据库中删除该对象,因此您可以将结果复制到List<CalendarDto> dtos = new ArrayList<>(); dtos.addAll(currentMonthDTOList); dtos.remove(dtos.size()); 并使用它进行操作:

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "integrantes", cascade =  {CascadeType.ALL})
private List<NucleoFamiliar> nucleosFamiliares;

@ManyToMany(fetch = FetchType.LAZY, mappedBy = "integrantes", cascade = {CascadeType.ALL})
private List<GrupoJaas> gruposJaas;` 

答案 2 :(得分:0)

您可以尝试复制到List,而不是尝试复制到RealmList

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

虽然我看到这对人有用,但我必须在这里引用Realm.io news

  

工作进行中

     

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

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