Android 使用RxJava处理回调
我试图理解使用RxJava处理特定情况的最佳方法是什么 我需要返回一个Android 使用RxJava处理回调,android,rx-java,Android,Rx Java,我试图理解使用RxJava处理特定情况的最佳方法是什么 我需要返回一个Observable,它处理从AndroidAccountManager中删除帐户的操作。不幸的是,此操作是异步的,需要回调来处理结果 因此,我使用了Observable.create方法,方法如下: return Observable.create(subscriber -> { final Account account = getAccountIfExist(); if (accou
Observable
,它处理从AndroidAccountManager
中删除帐户的操作。不幸的是,此操作是异步的,需要回调来处理结果
因此,我使用了Observable.create
方法,方法如下:
return Observable.create(subscriber -> {
final Account account = getAccountIfExist();
if (account == null) {
subscriber.onError(new NoUserFoundException());
return;
}
accountManager.removeAccount(account, future -> {
boolean result = false;
try {
result = future.getResult();
} catch (Exception ex) {
Log.e(TAG, "Remove account not successful : ", ex);
subscriber.onError(ex);
return;
}
if (result) {
subscriber.onNext(account.name);
subscriber.onCompleted();
} else {
subscriber.onError(new RuntimeException("Cannot remove the account."));
}
}, null);
});
但是,Observable.create
在处理背压和取消时有不同的问题,如本文所述
因此,问题是,我如何使用Observable.fromCallable
(或等效方法)来处理回调(一般)以及处理背压和取消?您可以尝试使用
可观察的
return Observable.defer(() -> {
final Account account = getAccountIfExist();
if (account == null) {
return Observable.error(new NoUserFoundException());
}
accountManager.removeAccount(account, future -> {
boolean result = false;
try {
result = future.getResult();
} catch (Exception ex) {
return Observable.error(ex);
}
if (result) {
Observable.just(account.name);
} else {
return Observable.error(new NoUserFoundException("Cannot remove the account."))
}
}, null);
});