gpt4 book ai didi

android - 使用 RxJava 处理回调

转载 作者:太空狗 更新时间:2023-10-29 14:00:57 26 4
gpt4 key购买 nike

我正在尝试了解使用 RxJava 处理特定情况的最佳方式是什么。

我需要返回一个 Observable 来处理从 Android AccountManager 中删除一个帐户。不幸的是,这个 Action 是异步的,它需要一个回调来处理结果。

因此,我正在使用 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 在处理背压和取消方面有不同的问题,如 post 中所述

所以,问题是,我如何使用 Observable.fromCallable(或等效方法)来处理回调(通常)以及处理背压和取消?

最佳答案

你可以尝试使用

Observable.defer

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);
});

关于android - 使用 RxJava 处理回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35551661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com