【发布时间】:2016-02-26 15:12:59
【问题描述】:
以下是我的确切代码。请注意,在 subscribe lambda 函数中调用了 foo(o)。这会在 Android 中产生严格模式错误。现在我当然可以在这里分拆一个线程,但那是 Rxjava 的做事方式吗?我现在是否必须再次考虑线程?想知道我在这里的最佳选择。我怎样才能做到这种 RxJava 方式,以便代码的其他部分可以订阅将返回网络调用响应的新事件?所以本质上我是通过异步响应将一种类型的事件 MyObj 转换为 NetObj 响应事件。
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 片段)中侦听数据事件 MyObject。一旦我得到这个,我想做两件事,用 MyObject 同步更新 UI,这是我想要消费的东西,而不仅仅是转换。但我也想启动一个长期运行的请求。返回 JsonObject 响应的网络调用。当它返回时,我可能会在同一个片段中处理它,或者我可能希望其他类能够监听这个事件。所以我不只是观察 MyObject 然后进行网络调用并获取响应。我需要同时执行这两项操作,一项同步另一项异步。
【问题讨论】:
-
看起来此类问题可能已在此处讨论过:github.com/ReactiveX/RxJava/issues/1574