我看了一个用MVP (链接在这里)编写的安卓应用程序的例子。但是现在我想将本教程中给定的RxJava1代码重新编码为RxJava2代码。然而,我对它有困难,特别是unSubscribe()和isUnSubscribed()。我试图改变它,我将分享我的尝试。
RxJava1代码:
public void doLogin(AuthCredentials credentials) {
cancelSubscription();
subscriber = new Subscriber<Account>() {
@Override public void onCompleted() {
if (isViewAttached()) {
getView().loginSuccessful();
}
}
@Override public void onError(Throwable e) {
if (isViewAttached()) {
getView().showError();
}
}
@Override public void onNext(Account account) {
eventBus.post(new LoginSuccessfulEvent(account));
}
};
// do login
accountManager.doLogin(credentials)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
}
private void cancelSubscription() {
if (subscriber != null && !subscriber.isUnsubscribed()) {
subscriber.unsubscribe();
}
}这是我在RxJava2代码上的尝试:
public void doLogin(AuthCredentials credentials) {
cancelSubscription();
subscriber = new Subscriber<Account>() {
@Override public void onSubscribe(Subscription s) {
// do login
accountManager.doLogin(credentials)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
}
@Override public void onCompleted() {
if (isViewAttached()) {
getView().loginSuccessful();
}
}
@Override public void onError(Throwable e) {
if (isViewAttached()) {
getView().showError();
}
}
@Override public void onNext(Account account) {
eventBus.post(new LoginSuccessfulEvent(account));
}
};
}
private void cancelSubscription() {
//isUnsubscribed and unsubscribe doesnt work anymore
}我对RxJava的概念相当陌生。如果有人能指出我的错误并指导我,那就太好了。:)
发布于 2017-01-28 10:27:07
我为迟到的答复道歉。一直都很忙。正如@akarnokd所述,与RxJava2相比,RxJava1做了许多更改。对于那些感兴趣的人,请看这个视频。
就上述问题而言,我们可以使用DisposableObservables实现同样的目标。
以下是上述问题的答案。我已经测试过了,而且效果很好。
public void doLogin(AuthCredentials credentials) {
myDisposableObserver = new DisposableObserver<Account>() {
@Override
public void onNext(Account account) {
eventBus.post(new LoginSuccessfulEvent(account));
}
@Override
public void onError(Throwable e) {
if (isViewAttached()) {
getView().showError();
}
}
@Override
public void onComplete() {
if (isViewAttached()) {
getView().loginSuccessful();
}
}
};
// do login
accountManager.doLogin(credentials)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(subscriber);
}
}
private void cancelSubscriptionToMyPrescriptorManager() {
if (myDisposableObserver != null && !myDisposableObserver.isDisposed()) {
myDisposableObserver.dispose();
}
} https://stackoverflow.com/questions/41510213
复制相似问题