2017-05-05 6 views
0

私は、ゲームのリストを取得し、結果をロードするコールバックを使用する関数を記述しようとしています。これは私が今持っているものです。レルムを使用するときに、より汎用的なクラスとインターフェイスを定義するにはどうすればよいですか?

public void getAllGames(OrderedRealmCollectionChangeListener<RealmResults<Game>> callback) { 
    realm.where(Game.class).findAllSortedAsync("startTime").addChangeListener(callback); 
} 

私は、この関数からデカップルレルム(OrderedRealmCollectionChangeListenerRealmResults)を作りたいが、私は方法がわかりません。私はOrderedRealmCollectionChangeListenerを拡張するリスナーを作成しようとしましたが、まだRealmResultsが付いています。それを拡張しようとすると、BaseRealmはプライベートなので、そのコンストラクタを作成することはできません。どのように私はそれがこのように見えるようにすることができます

public void getAllGames(SomeListener<SomeList<Game>> callback) { 
    realm.where(Game.class).findAllSortedAsync("startTime").addChangeListener(callback); 
} 

答えて

0

DERP、私がやるべきすべてがgetAllGames関数内でコールバックの動作記述である:あなたの変数は `findAllSortedAsync(から返された場合、

public void getAllGames(SomeListener<List<Game>> callback) { 
    realm.where(Game.class).findAllSortedAsync("startTime").addChangeListener(new OrderedRealmCollectionChangeListener<RealmResults<Game>>() { 
     @Override 
     public void onChange(RealmResults<Game> collection, OrderedCollectionChangeSet changeSet) { 
      callback.callback(collection); 
     } 
    }); 
} 
+0

間違った答えを) 'がGCdを取得すると、変更リスナーは決して呼び出されません。 – EpicPandaForce

+0

これは大丈夫ですが、コードをどのように記述しても、GCを取得していないことを確認するには、どのリスナーを保証することはできません。 –

+0

あなたは[スレッドローカルの強力な参照カウンタにそれを保持し、クエリが完了したらrefカウンタから削除することができます](https://github.com/realm/realm-java/blob/master/realm/realm-library) /src/main/java/io/realm/rx/RealmObservableFactory.java#L52-L57)、最初に 'getAllGames 'を呼び出した後、提供されたRealmResultsに起こる変更をどのように聴いているのか少し気になります。 () 'を返します。 – EpicPandaForce

関連する問題