Raw Query Factory:
interface GraphQuery {
@RawQuery(R.raw.product_search)
fun productSearch(): Extractor<String>
}
Thread:
/* for rx */
interface SchedulerProvider {
fun ui(): Scheduler
fun io(): Scheduler
}
/* for coroutines */
interface DispatcherProvider {
fun ui(): Dispatcher
fun io(): Dispatcher
}
Run:
/* with rx */
GraphQuery query = Extractor.create(GraphQuery::class.java)
GraphUseCase usecase = GraphUseCase(query.productSearch())
usecase.request(RequestParams())
.transform(schedulerProvider)
.subscribe { result ->
val data = result as DataBean.Response
println(data.productName)
}
/* with coroutines */
GraphQuery query = Extractor.create(GraphQuery::class.java)
GraphRepository repository = GraphRepository.instance()
launch(dispatcherProvider) {
val result = withContext(Dispatchers.IO) {
repository.response(query.productSearch(), cacheStrategy)
}
val data = result.successData as DataBean.Response
println(data.productName)
}