我使用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上打印。