【问题标题】:Handling callbacks with RxJava使用 RxJava 处理回调
【发布时间】:2016-02-22 10:50:07
【问题描述】:

我正在尝试了解使用 RxJava 处理特定案例的最佳方法。

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

正因为如此,我使用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(或等效方法)来处理回调(通常)以及处理背压和取消?

【问题讨论】:

    标签: android rx-java


    【解决方案1】:

    你可以尝试使用

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      相关资源
      最近更新 更多