Проблема обработчика onError с Rx Java, не знаю, как использовать subscribe () - PullRequest
0 голосов
/ 30 мая 2020

Я новичок ie в android и пытаюсь использовать Rx в своем проекте. И у меня проблема.

io.reactivex.exceptions.OnErrorNotImplementedException: The exception was not handled due to missing onError handler in the subscribe() method call. Further reading: https://github.com/ReactiveX/RxJava/wiki/Error-Handling | java.lang.RuntimeException: Field 'coinId' is not a java.lang.Number'

Вот мой код:

@NonNull
@Override
public Observable<List<Wallet>> wallets(@NonNull Currency currency) {
    return Observable.<QuerySnapshot>create(emitter -> {
        final ListenerRegistration registration = firestore
                .collection("wallets")
                .orderBy("at", Query.Direction.ASCENDING)
                .addSnapshotListener((snapshots, e) -> {
                    if (emitter.isDisposed()) return;
                    if (snapshots != null) {
                        emitter.onNext(snapshots);
                    } else if (e != null) {
                        emitter.tryOnError(e);
                    }
                });
        emitter.setCancellable(registration::remove);
    })
            .map(QuerySnapshot::getDocuments)
            .switchMapSingle((documents) -> Observable
                    .fromIterable(documents)
                    .flatMapSingle((document) -> coinsRepository
                            .coin(currency, Objects.requireNonNull(document
                                    .getLong("coinId"), "coinId")
                            )
                            .map((coin) -> Wallet.create(
                                    document.getId(),
                                    coin,
                                    document.getDouble("balance")
                            ))
                    )
                    .toList()
            );
}

Я создал эту конструкцию:

wallets.subscribeOn(shedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(onSuccess -> {Timber.d("");}, Timber::d)

Но я не могу понять, где мне использовать это и правильно ли?

...