下面是我的確切代碼。注意foo(o)在訂閱lambda函數內被調用。這給Android提供了嚴格的模式錯誤。現在我當然可以在這裏分解一個線程,但這是Rxjava做事的方式?我現在不得不再次考慮線程嗎?想在這裏知道我最好的選擇。我怎麼能這樣做RxJava的方式,使其他部分的代碼可以訂閱新的事件,這將返回網絡呼叫響應?所以基本上,我通過異步響應將一種類型的事件MyObj轉換爲NetObj響應事件。RxJava - 如何啓動訂閱的lambda函數內的異步網絡調用? Observable
public static final PublishSubject<MyObj> myObjSubject = PublishSubject.create();
public static final Observable<MyObj> observable = myObjSubject.asObservable();
protected CompositeSubscription myCompositeSubs = new CompositeSubscription();
myCompositeSubs.add(
observable.subscribe((MyObj o) -> {
// `. Update UI with MyObject and
// 2. Kick off network call which will return JsonResponse type object which I would like to possibly process here and also publish to let others respond to it.
foo(o); // $$$$$ million dollar question what if I am kicking off something long running here?
}));
private void foo(MyObj o){
// long running request. How to kick off long running from here?
JsonRespons resp = RestAdapter.makeQuest(o.url);
// I want this JsonResponse object to be an even others can listen for. I don't want to just process it right here.
}
更新:只是爲了闡明我正在嘗試做的是偵聽類(Android Fragment)中的數據事件MyObject。一旦我得到了這個,我想做兩件事情,用MyObject同步更新UI,這是我想要消費的東西,而不僅僅是轉換。但我也想開始一個長期的請求。一個返回JsonObject響應的網絡調用。這可能會在它返回時處理相同的片段,或者我可能希望其他類能夠監聽此事件。所以我並沒有單獨觀察MyObject來進行網絡調用並獲得響應。我需要做兩個操作,一個同步另一個異步。
看起來像這種類型的問題可能已經在這裏討論:https://github.com/ReactiveX/RxJava/issues/1574 – FunctionallyReactive