Я использую RxJava в своем приложении для Android, и я хочу загрузить данные из базы данных.
Таким образом, я создаю новый Observable, используя Observable.create()
, который возвращает список EventLog
public Observable<List<EventLog>> loadEventLogs() {
return Observable.create(new Observable.OnSubscribe<List<EventLog>>() {
@Override
public void call(Subscriber<? super List<EventLog>> subscriber) {
List<DBEventLog> logs = new Select().from(DBEventLog.class).execute();
List<EventLog> eventLogs = new ArrayList<>(logs.size());
for (int i = 0; i < logs.size(); i++) {
eventLogs.add(new EventLog(logs.get(i)));
}
subscriber.onNext(eventLogs);
}
});
}
Хотя он работает правильно, я читал, что использование Observable.create()
на самом деле не является лучшей практикой для Rx Java (см. здесь).
Поэтому я изменил этот метод таким образом.
public Observable<List<EventLog>> loadEventLogs() {
return Observable.fromCallable(new Func0<List<EventLog>>() {
@Override
public List<EventLog> call() {
List<DBEventLog> logs = new Select().from(DBEventLog.class).execute();
List<EventLog> eventLogs = new ArrayList<>(logs.size());
for (int i = 0; i < logs.size(); i++) {
eventLogs.add(new EventLog(logs.get(i)));
}
return eventLogs;
}
});
}
Это лучший подход с использованием Rx Java? Зачем? На самом деле разница между этими двумя методами?
Кроме того, поскольку база данных загружает список элементов, имеет смысл сразу же издать весь список? Или я должен испускать один элемент за раз?