2017-05-05 42 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函數內部的回調行爲:

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

錯誤的答案,如果你的變量通過'findAllSortedAsync返回( )'獲取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