RxJava的可完成未完成或错误

时间:2019-10-14 16:11:42

标签: android kotlin rx-java2

我使用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代码,正在尝试使用此Completable用例

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编写测试用例,并尝试 通过传递名称null和一些不会发生的空值来使Completable.complete()和Completable.error测试用例通过。

即使我已经创建了一个测试应用程序,将所有这些内容组合在一起,可以从演示者那里调用交互器。但是,没有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的相应回调

编辑:我现在观察到一些奇怪的东西。 kotlin的打印方法没有被打印,因此在我看来回调没有触发。我不好,但是不知道为什么这些打印方法不能在android studio上打印。

0 个答案:

没有答案