从下一个活动返回后,不会订阅Observable

时间:2017-12-30 23:15:21

标签: android rx-java2 rx-android

我在onActivityCreated的片段中有CompositeSubscription。在EditText中更改字符串后,mViewModel中的代码会发出Observable。

    mSubscription = new CompositeSubscription();
    mSubscription.add(mViewModel.getMyObservableIdModelCompany()
            .observeOn(rx.android.schedulers.AndroidSchedulers.mainThread())
            .doOnError(throwable -> { Log.e(TAG, "Error NewCashDocFragment " + throwable.getMessage());
                hideProgressBar();
                Toast.makeText(getActivity(), "Server not connected", Toast.LENGTH_SHORT).show();
            })
            .onErrorResumeNext(throwable -> empty())
            .subscribe(this::setIdCompanyKt));

我的mViewModel中的方法

public Observable<List<IdCompanyKt>> getMyObservableIdModelCompany() {

    return mObservableIdModelCompany
            .observeOn(mSchedulerProvider.computation())
            .flatMap(queryx -> mDataModel.getObservableIdModelCompany());
}

链接到完整的片段代码https://github.com/eurosecom/samfantozzi/blob/masterAS3/app/src/main/java/com/eusecom/samfantozzi/NewCashDocFragment.java

如果我启动Activityfragment,代码工作正常,我订阅了Observable。如果我启动startActivityForResult下一个Activity并返回Activityfragment,我就不能订阅Observable。

似乎在返回之后我的Observable在另一个线程上。

为什么我不能在从下一个Activity返回后订阅Observable?

1 个答案:

答案 0 :(得分:0)

我已将创建和订阅Observable从方法onActivityCreated移动到方法onResume并取消订阅Observable到方法onPause。 Observable是每次从下一次活动返回时重新初始化的。

@Override
public void onResume() {
    super.onResume();
    bind();
    mSubscription = new CompositeSubscription();
    mSubscription.add(mViewModel.getMyObservableIdModelCompany()
            .subscribeOn(Schedulers.computation())
            .observeOn(rx.android.schedulers.AndroidSchedulers.mainThread())
            .doOnError(throwable -> { Log.e(TAG, "Error NewCashDocFragment " + throwable.getMessage());
                hideProgressBar();
                Toast.makeText(getActivity(), "Server not connected", Toast.LENGTH_SHORT).show();
            })
            .onErrorResumeNext(throwable -> empty())
            .subscribe(this::setIdCompanyKt));
}