想象一下,您需要加載一些數據並將其保存到您的碎片中。RX Java多訂閱
我想使用RX Java。你如何處理一個片段上的多個訂閱? 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);
這背後的想法是保存和使用Loader.load方法()loader.save()負載項目,每個項目的這將導致觀察者正在使用(mReadSubscription,mWriteSubscription)。
WriteObserver只是一個簡單的Bean再次實現觀察器,但有部分我不明白:#bindFragment方法檢查Fragment的實例。由於WriteObserver不是我導致異常的片段。 但我不能註冊第二觀察員,因爲泛型。
林肯定我很確定我知道更少關於RX,任何人都可以指向我在一個正確的方向來解決這個問題?
[更新1]
還有就是我WriteObserver:
private final class WriteObserver implements Observer<Void> {
@Override
public void onCompleted() {
Toast.makeText(getActivity(), "Save Successful", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Void aVoid) {
}
}
設計是無法正常運轉的WriteObserver不是一個片段,因爲當你做一個例外:
java.lang.IllegalArgumentException: Target fragment is neither a native nor support library Fragment
AndroidObservable.bindFragment(observer, source)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(observer);
那麼,我該如何解決這個限制?
我更新了更新後我的反應。 – dwursteisen 2014-10-20 10:12:28