Завершается из RxJava не завершается или ошибка - PullRequest
0 голосов
/ 14 октября 2019

Я использую Rxjava более нескольких лет, но никогда не пробовал использовать другие операторы, кроме Observable. Недавно я разрабатывал новое приложение, для которого я прочитал несколько статей о том, как наилучшим образом использовать RxJava. Я использовал MVP для своего проекта и знаком с интеракторами. Я написал один базовый Interactor, который выполняет фоновую работу для меня. Ниже приведен исходный код для этого.

abstract class CompletableInteractor<PARAMS>(
private val executionThread: ExecutionThread,
private val postExecutionThread: PostExecutionThread) {

private val disposables = CompositeDisposable()
protected abstract fun buildUseCase(params: PARAMS?): Completable

private var isInProgress = false

fun execute(observer: CompletableObserver, params: PARAMS? = null) {
    val subscribeWith = this.buildUseCase(params)
        .subscribeOn(executionThread.scheduler) //io
        .observeOn(postExecutionThread.scheduler) // AndroidMainThread
        .subscribeWith(observer)}

}

Теперь вот мой код Interactor, который пытается работать с этим завершаемым вариантом использования

class ApplicationSearchInteractor @Inject constructor(
private val dataService: DataService,
@Named(ComputationThread.computation) executionThread: ExecutionThread,
postExecutionThread: PostExecutionThread) : CompletableInteractor<String>(executionThread, postExecutionThread) {

override fun buildUseCase(params: String?): Completable {
    return dataService.doSomeCompletable(params)}}

Теперь вот реализация DataService

class DataUploadRepository @Inject constructor(){

override fun doSomeCompletable(name: String?): Completable {
    name?.let {
        return Completable.complete()
    } ?: kotlin.run {
        return Completable.error(NullPointerException())
        }
    }   }

Теперь я пытаюсь написать тестовый пример для ApplicationSearchInteractor и сделать так, чтобы тестовые случаи Completable.complete () и Completable.error передавались, передавая имя null, а некоторые значения не равны null. чего не происходит.

Даже я создал тестовое приложение, объединяющее все эти вещи и вызывающее интерактив от докладчика. Но ни один из обратных вызовов CompletableObserver не вызывается. Теперь я совершенно не знаю, какие ошибки я совершаю, поскольку я делал то же самое с Observable, и с этим все было замечательно. Код докладчика

class DataUploadPresenter @Inject constructor(private val applicationSearchInteractor: CompletableInteractor<String>) {

fun registerApplications(callingApp: String) {
    applicationSearchInteractor.execute(applicationFoundObserver, null)
}


private val applicationFoundObserver = object : CompletableObserver {
    override fun onSubscribe(d: Disposable) {

    }

    override fun onComplete() {
        print("hello")
    }

    override fun onError(e: Throwable) {
        print("error")
        //e.printStackTrace()
    }

}}

Когда я пытаюсь завершить или выдает ошибку Completable, он не вызывает соответствующие вызовы CompletableObserver

EDIT: я заметил кое-что странное сейчас. методы печати kotlin не печатаются, поэтому мне показалось, что обратные вызовы не срабатывают. Мое плохо, но я не знаю, почему эти методы печати не печатают на андроид студии.

...