使用Runnable时,网络请求无法成功执行

时间:2018-11-26 10:40:51

标签: android retrofit2 rx-java2 runnable

我正在使用Retrofit2RxJava2进行网络请求。

我有一个简单的可运行对象,其中包括:

override fun run() {
    handler.postDelayed(this, interval)
    DummyService.syncData(context, null)
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe( response -> {
                    //nothing
                }, e -> {
                    //nothing
                });
}

我的syncData函数如下所示:

fun syncData(): Single<Unit> {
    Log.d("...", "sync before")
    return service.test(null)
                .onErrorResumeNext(ErrorHandler(BaseErrorParser()))
                .map { jsonApiObject ->
                     Log.d("...", "sync WHOLE DATA")


                    ....
                }
}

在日志中,我可以看到可运行的机制很好-调用了syncData(),并且在日志"sync before"中看到了消息,但没有看到"sync WHOLE DATA"。我确实尝试放置一个断点-它显示检查(因为它在那里,但是调试器从未真正停止该点)。我可以看到网络请求已执行,但未成功。这是为什么?如果我正常调用相同的函数(不是从runnable调用的),则可以正常工作。

1 个答案:

答案 0 :(得分:0)

您的syncData函数返回Single对象。您应该通过

执行它
DummyService.syncData(context, null).subscribe(response -> {

})