Представьте, что вам нужно загрузить и сохранить некоторые данные в одном из ваших фрагментов.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 - это простой боб, реализующий Observer еще раз, но есть часть, которую я не понимаю: #bindFragment Method проверяет экземпляры фрагмента. Поскольку WriteObserver не является фрагментом, я вызываю исключение. Но я не могу зарегистрировать второго наблюдателя из-за Generics.
Я уверен, что знаю меньше о RX, любой может указать мне в правильном направлении, чтобы решить эту проблему?
[Update 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