2016-11-06 4 views
1

Realm Версия: 2.1.1RealmChangeListener OnChange() никогда не стреляет

У меня есть фрагмент и в его onCreate() я зарегистрировать RealmChangeListener. Однако, когда мой объект обновляется, RealmChangeListeneronChange() никогда не срабатывает.

На самом деле это ложь, по какой-то странной причине, если я убираю установку своего приложения, она будет работать несколько раз, прежде чем вообще не работать вообще, пока я не удалю/повторно установлю приложение еще раз.

Я знаю, что мои операции Realm записываются в Realm, потому что если я перезапущу приложение, пользовательский интерфейс обязательно отобразит эти новые изменения. Не знаю, почему, возможно, слушатели отменили регистрацию?

Чувство немного запутался здесь, я надеюсь, что я не делаю что-то неправильно:

public class ProfileFragment extends Fragment { 

    private Realm mRealm; 
    private RealmChangeListener mRealmChangeListener; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      mRealm = Realm.getDefaultInstance(); 

      // Get user from Realm 
      RealmQuery<User> query = mRealm.where(User.class); 
      User user = query.findFirst(); 

      updateUI(user); 

      mRealmChangeListener = new RealmChangeListener<User>() { 
       @Override 
       public void onChange(User user) { 
        updateUI(user); 
       } 
      }; 

      user.addChangeListener(mRealmChangeListener); 

     } 

     // Todo: 
     // Unregister listeners + realm in OnDestroy(); 
} 

ответ

2

Ваша проблема может быть, что вы на самом деле не сохраняют сильную ссылку на ваш User объекта.

public class ProfileFragment extends Fragment { 

    private Realm mRealm; 
    private RealmChangeListener mRealmChangeListener; 
    private User user; 

... 

      // Get user from Realm 
      RealmQuery<User> query = mRealm.where(User.class); 
      user = query.findFirst(); 

Кроме того, вы в фрагменте, поэтому вы должны рассмотреть перемещение onCreate()/onDestroy() к onCreateView() и onDestroyView() (если это не является сохранить фрагмент, в этом случае идти вперед).

Если проблема не устранена, сообщите здесь.

+1

Удивительный! Это было то, что у меня не было большой ссылки на мой объект User, как вы сказали. Отлично работает сейчас :) Спасибо. – Micro

Смежные вопросы