下面是我的确切代码。注意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