Я пытаюсь протянуть руку и RxAndroid. У меня есть адаптер синхронизации, запрашивающий службу A, чтобы получить список страниц (размер n). Для каждого элемента в Pages мне нужно сделать запрос, который генерирует другие строки (размер m). То есть для каждого элемента в Pages будет m Lines.I хочу объединить все n строк в 1 список размера m * n и перенести в db.Создание структуры дерева с использованием RxAndroid
Observable.create(new Observable.OnSubscribe<Page>(){
@Override
public void call(Subscriber<? super Page> subscriber) {
ArrayList<Page> pages = Utility.getPagesFromServer();
for (Page page : pages) {
subscriber.onNext(page);
}
subscriber.onCompleted();
}
}).map(new Func1<Page, JSONResponse>() {
@Override
public JSONResponse call(Page page) {
return Utility.getJSONObjectContainingLines(page);
}
}).map(new Func1<JSONResponse, ArrayList<Line>>() {
@Override
public ArrayList<Line> call(JSONResponse jsonResponse) {
return getLines(jsonResponse.getJSONObject());
}
})
Я получаю страницы с сервера, то карта и получать строки для каждой страницы с сервера, а затем я разобрать JSON и получить ArrayList линий. Я не уверен, как исходить отсюда. Теперь я хочу перебирать каждую строку, а не каждый ArrayList.
Спасибо большое. Также вы можете сказать мне, почему вместо Observable.create вы использовали defer вместо Observable.defer? – Abhik
@ Абхик, пожалуйста. 'Utility.getPagesFromServer()' может занять много времени, потому что, скорее всего, он использует сетевые операции (я заключаю это из названия). Используя 'defer()' вы можете гарантировать, что эта операция не будет выполняться в основном потоке. Else, он будет выполнен в основном потоке, и, скорее всего, вы должны получить 'NetworkOnMainThreadException'. Используйте 'defer()', чтобы избежать этого – Alexander
@Abhik, вы можете прочитать об этом здесь: http://blog.danlew.net/2014/10/08/grokking-rxjava-part-4/ – Alexander