Android RealmChangeListener onChange()从不激发

Android RealmChangeListener onChange()从不激发,android,realm,Android,Realm,领域版本:2.1.1 我有一个片段,在它的onCreate()中注册了一个RealmChangeListener。但是,当更新我的对象时,RealmChangeListener的onChange() 事实上,这是一个谎言,出于某种奇怪的原因,如果我清洁安装我的应用程序,它会工作几次,然后根本不工作,直到我再次卸载/重新安装应用程序 事实上,我知道我的Realm操作正在写入Realm,因为如果我重新启动应用程序,UI肯定会显示这些新的更改。不知道为什么听众会取消注册 我感到有点困惑,希望我没有做错

领域版本:
2.1.1

我有一个片段,在它的
onCreate()
中注册了一个
RealmChangeListener
。但是,当更新我的对象时,
RealmChangeListener
onChange()

事实上,这是一个谎言,出于某种奇怪的原因,如果我清洁安装我的应用程序,它会工作几次,然后根本不工作,直到我再次卸载/重新安装应用程序

事实上,我知道我的
Realm
操作正在写入
Realm
,因为如果我重新启动应用程序,UI肯定会显示这些新的更改。不知道为什么听众会取消注册

我感到有点困惑,希望我没有做错什么:

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();
}
公共类ProfileFragment扩展了片段{
私人领域;
私有RealmChangeListener mRealmChangeListener;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mRealm=Realm.getDefaultInstance();
//从域获取用户
RealmQuery query=mRealm.where(User.class);
User=query.findFirst();
updateUI(用户);
mRealmChangeListener=新的RealmChangeListener(){
@凌驾
公共void onChange(用户){
updateUI(用户);
}
};
user.addChangeListener(mRealmChangeListener);
}
//待办事项:
//在OnDestroy()中注销侦听器+域;
}

您的问题可能是您实际上没有保留对
用户
对象的强引用

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();
公共类ProfileFragment扩展了片段{
私人领域;
私有RealmChangeListener mRealmChangeListener;
私人用户;
...
//从域获取用户
RealmQuery query=mRealm.where(User.class);
user=query.findFirst();
也就是说,你在一个片段中,所以你应该考虑把<代码> OnCeCuto()/代码> /<代码> OnDebug()/<代码> > <代码> OnCeCaleVIEW()>代码>和<代码> OnDeavyVIEW()/代码>(除非这是一个保留片段,在这种情况下继续进行)。
如果问题仍然存在,请返回此处报告。

太棒了!这是因为我没有像您所说的那样对我的用户对象进行强引用。现在效果很好:)谢谢。