Android RX Java多个订阅

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

假设您需要在一个片段中加载并保存一些数据

我想使用RXJava。如何处理一个片段上的多个订阅?AndroidObservable.bindFragment执行此任务。但是,当我需要更多订阅时,如何使用它

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);