GreenRobot을 사용하여 조각간에 RealmResults를 공유하려고합니다. 사용자가 I 표시 할 데이터를 변경 특정 버튼을 클릭하면, 나는 invalidateRealmResult 전화 :새 이벤트 버스 게시물에서 RealmResults가 삭제되지 않습니다.
public void invalidateRealmResult() {
RealmQuery<Climb> realmQuery = mRealm.where(Climb.class);
// other query modifiers added here....
mResult = realmQuery.findAllSorted("date", Sort.ASCENDING);
RealmChangeListener listener = new RealmChangeListener<RealmResults<Climb>>() {
@Override
public void onChange(RealmResults<Climb> element) {
Log.d(TAG, "Realmresult onchange");
EventBus.getDefault().postSticky(new RealmResultsEvent(mResult));
}
};
mResult.addChangeListener(listener);
EventBus.getDefault().postSticky(new RealmResultsEvent(mResult));
}
내 greenrobot 이벤트는 다음과 같습니다
public class RealmResultsEvent {
public RealmResult mResult;
public RealmResultsEvent(RealmResult result){
this.mResult = result
}
}
새로운 결과 구독 업데이트 할 필요가 모든 조각 이벤트에 : 나는 모든 조각 ONSTART (에 가입 할 것을 확인했다)와 중지시에서 탈퇴 한
@Subscribe(sticky = true)
public void onRealmResultEvent(RealmResultsEvent event) {
mResult = event.mResult;
updateView();
}
@Override
public void onStop() {
super.onStop();
EventBus.getDefault().unregister(this);
}
@Override
public void onStart() {
super.onStart();
EventBus.getDefault().register(this);
}
().
내 문제는 새 이벤트 게시물이 이전 RealmResults
을 덮어 쓰지 않는 것으로 보입니다. 나는 RealmChangeListener
에있는 로그 메시지가 영역 데이터베이스에 추가 될 때마다 증가하는 양을 얻게되고, UI는 잘못된 쿼리 결과를 보여주기 때문에 RealmResults
이 파괴되지 않는다는 것을 알 수 있습니다.
05-13 10:36:55.523 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.536 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.544 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.551 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.558 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.566 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.574 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.583 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.591 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.600 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.608 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
05-13 10:36:55.616 17684-17684/com.example.grant.wearableclimbtracker D/MainActivity: Realmresult onchange
내가 변경할 때마다, 그 패턴을 반복, 교류 3, 6, 12, 6, 3, ... 배 리스너를 호출합니다. 이것이 의미하는 바가 무엇인지, 또는 그 정보가 누구에게 도움이되는지 확실하지 않습니다.
안녕하세요 @ 그랜트카, 저는이 질문을 이해하고 있는지 잘 모르겠습니다. 'mResults'라는 두 개의 다른 변수가 있습니까? 내용을 변경하는 코드는 어디에 있습니까? 그러면 리스너가 실행됩니까? –
안녕하세요 @ G.BlakeMeike, 네 거기에 내 MainActivity mResult 및 mResult 데이터를 표시하는 UI 요소가 들어 조각에 있습니다. 리스너를 실행하는 코드를 표시하지는 않았지만 기본적으로 클라이밍 객체를 영역에 추가하는 것입니다. – grantka