Есть много способов достичь того, что вы хотите.Вы не предоставили много контекста, поэтому я буду использовать в качестве примера следующее:
- у вас есть
Invoice
s, хранящиеся в базе данных - у вас есть метод, который выбирает этииз БД и возвращает результаты в виде
List
Пример для Kotlin, хотя будет очень похож на Java.
Итак, вот ваш метод извлечения БД:
fun queryInvoices(): List<Invoice>{
val results = arrayListOf<Invoice>()
// your logic to retrieve data from SQLite
return results
}
Предполагая, что вам нужно извлекать различные типы данных, имеет смысл определить универсальный метод, который будет выполнять магию Rx.Это в основном 1-строчный в Kotlin:
fun <T>rxFetchData(func: () -> List<T>): Single<List<T>> = Single.fromCallable(func)
Как это работает: аргумент этого метода - функция, которая не принимает аргументов (в этом примере) и возвращает List
некоторого типа. Single.fromCallable откладывает выполнение этой функции до тех пор, пока вы не подпишетесь (проверьте ссылку для получения дополнительной информации).
Использование:
fun fetchInvoices() {
rxFetchData(::queryInvoices)
.subscribeOn(io())
.observeOn(mainThread())
.subscribe(
{ data ->
Log.i("onSuccess", " fetched ${data.size} invoices")
},
{ error ->
error.printStackTrace()
})
}
А вот импорт, который выпотребуется:
import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers.mainThread
import io.reactivex.schedulers.Schedulers.io
ОБНОВЛЕНИЕ
Вы можете сделать что-то подобное (Java):
public Single<List<Invoice>> invoices(){
return Single.fromCallable(this::fetchInvoices);
}