i trying use rxjava chain list of requests can't figure out how correctly. have list (list_a), want iterate through , send data first service (service_a). response have send new list (list_b) second web service (service_b). flow: -> loop (list_a) send item_a ->> after sending item_a (it needs start second loop (list_b) , send items) -- end loop
that have done far:
private static <t> observable<t> makeobservable(final callable<t> func) { return observable.create( new observable.onsubscribe<t>() { @override public void call(subscriber<? super t> subscriber) { try { subscriber.onnext(func.call()); } catch(exception ex) { log.e("op_dao", "error reading database", ex); } } }); } public observable<list<visitinfo>> getvisitobservable() { return makeobservable(this.getvisit()) .subscribeon(schedulers.computation()) ; } public callable<list<visitinfo>> getvisit() { return new callable<list<pesquisainfo>>() { @override public list<visitinfo> call() throws exception { list<visitinfo> list = new arraylist<visitinfo>(); // 1. build query string query = "select * " + visit ; // 2. reference writable db try { cursor cursor = getmywritabledatabase().rawquery(query, null); // 3. go on each row, build book , add list if (cursor.movetofirst()) { { visitinfo v = new visitinfo(); ... list.add(v); } while (cursor.movetonext()); closecursor(cursor); } return list; } { closedatabase(); } } }; } client client = new servicegenerator().createservice(client.class); call<list<ws01>> wsservicecall = client.getdata(user); call<list<ws02>> wsservice2call = client.getdata2(dependent of first call);
anyone can me please, spent few days trying understand how use rxjava , retrofit being harder expected.
well, need describe problem better; use bit of pseudocode or sequence diagram.
one way want approximately follows:
import static observable.*; public list<visitinfo> getvisit() { /* db things here */ } return defer(() -> from(getvisit())) .flatmap(visit -> fromcallable(client.getdata(visit)) .flatmapiterable(otherlist -> otherlist) .flatmap(other -> fromcallable(client.getdata2(visit, other))));
if use retrofit, don't need fromcallable
calls, make interface methods return observables.