Я использую 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 не печатаются, поэтому мне показалось, что обратные вызовы не срабатывают. Мое плохо, но я не знаю, почему эти методы печати не печатают на андроид студии.