2016-11-06 4 views
1

レルムバージョンを発射することはありません。しかし、私のオブジェクトが更新されると、RealmChangeListeneronChange()は決して起きません。RealmChangeListenerのonChangeは()

実際には、私はアプリをクリーンアップするといくつかの奇妙な理由で、アプリをアンインストール/再インストールするまで数回動作します。

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(); 

はまた、あなたがフラグメントにいるので、(これは先に行く、その場合に保持断片である場合を除き)あなたはonCreateView()onDestroyView()onCreate()/onDestroy()を移動することを検討すべきです。

問題が解決しない場合は、ここに報告してください。

+1

恐ろしく!あなたが言ったように、私は自分のUserオブジェクトを強く参照していませんでした。今素晴らしい作品:)ありがとう。 – Micro

関連する問題