RXJava: результат 'Single.subscribe ()' игнорируется - PullRequest
0 голосов
/ 27 апреля 2019

Я изучаю основы 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

Как я мог избавиться от этого надлежащим образом?

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

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 голосов
/ 14 мая 2019

Хотя ответ PPartisans является правильным в отношении полученного вами предупреждения, следующее может быть более понятным для преобразования вашей наблюдаемой в одну (нет необходимости в 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()
}
...