Я показываю PagedList, который использует источники данных Retrofit и Room.Как выполнить поиск по всему списку, пока он все еще находится на первой странице.
Я пытался выполнить поиск с помощью Room.Но я не могу получить элементы, которые еще не добавлены в БД.
Вот мой репозиторий
public class ItemsRepository {
private static final String TAG = "ItemsRepository";
private static ItemsRepository instance;
final private ItemsNetwork network;
final private ItemsDatabase database;
final private MediatorLiveData liveDataMerger;
public ItemsRepository(Context context) {
NetItemsDataSourceFactory dataSourceFactory = new NetItemsDataSourceFactory(context);
network = new ItemsNetwork(dataSourceFactory, boundaryCallBack);
database = ItemsDatabase.getInstance(context.getApplicationContext());
// When we get new Items from network we set them into the database
liveDataMerger = new MediatorLiveData();
liveDataMerger.addSource(network.getPagedItems), value -> {
liveDataMerger.setValue(value);
});
// Save Items into DB
dataSourceFactory.getItems().
observeOn(Schedulers.io()).
subscribe(item -> {
((ItemsDatabase) database).itemsDao().insertItems(item);
});
}
private PagedList.BoundaryCallback<Item> boundaryCallBack = new PagedList.BoundaryCallback<Item>() {
@Override
public void onZeroItemsLoaded() {
super.onZeroItemsLoaded();
liveDataMerger.addSource(database.getPagedItems(), value -> {
liveDataMerger.setValue(value);
liveDataMerger.removeSource(database.getPagedItems());
});
}
};
public static ItemsRepository getInstance(Context context) {
if (instance == null) {
instance = new ItemsRepository(context);
}
return instance;
}
public LiveData<NetworkState> getNetworkState() {
return network.getNetworkState();
}
public LiveData<PagedList<Items>> getItems() {
return liveDataMerger;
}
}
Я не уверен, что это лучший способ, сначала запросить по сети, а затем обновитьпредметы или запросить номер БД напрямую