RXJava:忽略'Single.subscribe()'的结果

问题描述 投票:0回答:2

我正在学习RXJava的基础知识。正如你所看到的,我有一个小方法,只检查两个整数是否相等,并以单个形式返回结果

/**
 * This method checks if both online and offline shopping carts have the same number of items
 * @param numberOfItemsInLocalCart The number of items existing in the offline cart
 * @return true if items in both carts match, false otherwise
 */
public static Single<Boolean> run(int numberOfItemsInLocalCart)
{
    return Single.create(emitter ->
            _VolleyService.getInstance().getDataFuture(URLs.Home).subscribe(
                response ->
                {
                    ShoppingCart cart = HTMLParser.getItemsInShoppingCart(response);
                    if(cart.NumberOfElements == numberOfItemsInLocalCart)
                        emitter.onSuccess(true);
                    else
                        emitter.onSuccess(false);
                },
                    emitter::onError));
}

我收到一条警告信息显示:

Result of 'Single.subscribe()' is ignored

我怎么能以适当的方式摆脱这个?

android rx-java warnings
2个回答
1
投票

Single#subscribe返回Disposable。保留对此的引用允许您稍后取消订阅Single的结果。

var disposable: Disposable? = run(20).subscribe()
//And later, if you're no longer interested in the result of your Single...
disposable?.dispose()

0
投票

虽然PPartisans对你收到的警告的答案是正确的,但是将你的observable转换为单个可能更清晰(不需要Single.create):

public static Single<Boolean> run(int numberOfItemsInLocalCart) {
    return _VolleyService.getInstance().getDataFuture(URLs.Home)
            .map(response -> {
                    ShoppingCart cart = HTMLParser.getItemsInShoppingCart(response);
                    return cart.NumberOfElements == numberOfItemsInLocalCart
            }.singleOrError()
}
© www.soinside.com 2019 - 2024. All rights reserved.