没有from
或to
方法从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)
答案 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提供初始支持,但我们仍然缺少对
RealmQuery
和RealmList
的Observable支持。这些将在未来的更新中添加。
此外,您可以尝试新的copyFromRealm()
方法并使用copyToRealmOrUpdate()
方法更新数据库。