Android RX Java多个订阅
假设您需要在一个片段中加载并保存一些数据 我想使用RXJava。如何处理一个片段上的多个订阅?AndroidObservable.bindFragment执行此任务。但是,当我需要更多订阅时,如何使用它Android RX Java多个订阅,android,rx-java,Android,Rx Java,假设您需要在一个片段中加载并保存一些数据 我想使用RXJava。如何处理一个片段上的多个订阅?AndroidObservable.bindFragment执行此任务。但是,当我需要更多订阅时,如何使用它 public class MyFragment extends SomeFragment implements Observer<List<Item>> { private Subscription mReadSubscription; private Subscri
public class MyFragment extends SomeFragment implements Observer<List<Item>>
{
private Subscription mReadSubscription;
private Subscription mWriteSubscription;
private JSONLoader mLoader;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
final File theFile = new File(getActivity().getFilesDir(), FILE_NAME);
mLoader = new JSONLoader(theFile);
mReadSubscription = mLoader.getReadSubscription(this);
mWriteSubscription = mLoader.createWriteSubscription(new WriteObserver(), Collections.EMPTY_LIST);
那么,我怎样才能绕过这个限制呢 据我所知,
mLoader#getReadSubscription()
和mLoader#createWriteSubscription()
创建并订阅流
我不认为这样做是正确的,就像mLoader订阅流一样,它也应该处理如何取消订阅
如果要使用AndroidObservable.bindFragment
,mLoader#getReadSubscription()
和mLoader#createWriteSubscription()
应返回可观察的
,而不是订阅
因此,在您的片段中,您将能够编写:
@Override
public void onCreate(final Bundle savedInstanceState) {
// [...]
Observable<?> readObs = mLoader.getReadSubscription();
mReadSubscription = AndroidObservable.bindFragment(this, readObs).subscribe(this);
Observable<?> writeObs = mLoader.createWriteSubscription(Collections.emptyList());
mWriteSubscription = AndroidObservable.bindFragment(this, writeObs).subscribe(new WriteObserver());
}
因此,在你的情况下:
AndroidObservable.bindFragment(this, source) // as bindFragment observeOn mainThread, you can remove the observeOn method call
.subscribeOn(Schedulers.io())
.subscribe(observer);
而不是
AndroidObservable.bindFragment(observer, source)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
我在你更新后更新了我的回复。
public static <T> Observable<T> bindFragment(Object fragment, Observable<T> source) {
// ...
}
yourSubscription = AndroidObservable.bindFragment(yourFraglebt, yourObservable).subscribe(yourObserver);
AndroidObservable.bindFragment(this, source) // as bindFragment observeOn mainThread, you can remove the observeOn method call
.subscribeOn(Schedulers.io())
.subscribe(observer);
AndroidObservable.bindFragment(observer, source)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);