2016-11-06 125 views
1

境界版本:2.1.1RealmChangeListener的onChange()永遠不會觸發

我有一個片段,並在它的onCreate()我註冊一個RealmChangeListener。但是,當我的對象更新時,RealmChangeListeneronChange()從不會觸發。

其實,那是騙人的,一些奇怪的原因,如果我全新安裝我的應用程序將無法正常工作在所有的一切,直到我卸載工作之前幾次/重新安裝應用程序。

我知道一個事實,我的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(); 
} 

回答

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

真棒!就是因爲我沒有像你說的那樣強烈地引用我的用戶對象。現在很好用:)謝謝。 – Micro

相關問題