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()/代码>(除非这是一个保留片段,在这种情况下继续进行)。
如果问题仍然存在,请返回此处报告。太棒了!这是因为我没有像您所说的那样对我的用户对象进行强引用。现在效果很好:)谢谢。