Android 如何通过单击按钮使用改装、发布中继和rxjava重试网络请求?

Android 如何通过单击按钮使用改装、发布中继和rxjava重试网络请求?,android,kotlin,rx-java,retrofit,rx-android,Android,Kotlin,Rx Java,Retrofit,Rx Android,我试图使用发布中继在发生错误时重试可观察链。这是我在kotlin中使用的实现: private fun getPostsFromVM(maxRes : String) : Disposable{ return viewModel.getPostList(maxRes). retryWhen { attempt -> publishRelay }. subscribeOn(Schedulers.io()).

我试图使用发布中继在发生错误时重试可观察链。这是我在
kotlin
中使用的实现:

 private fun getPostsFromVM(maxRes : String) : Disposable{
        return viewModel.getPostList(maxRes).
        retryWhen { attempt -> publishRelay }.
                subscribeOn(Schedulers.io()).
                observeOn(AndroidSchedulers.mainThread()).
                subscribe({//handle post response
                    Log.d("SubscribeResp",it.etag)
                    //Toast.makeText(activity,it.blogKind,Toast.LENGTH_LONG).show()
                    text.text = " ${it.blogKind } \n ${it.items.get(0).title}"
                },{
                    Log.d("ApiResponseError",it.localizedMessage)
                    if (it is HttpException){
                    retryBtn.visibility = View.VISIBLE
                    val resp = it.response()
                    when(resp.code()){
                        403 -> Toast.makeText(activity,"403 Error",Toast.LENGTH_LONG).show()
                        304 -> Toast.makeText(activity,"304 Error",Toast.LENGTH_LONG).show()
                        else -> Toast.makeText(activity,resp.message(),Toast.LENGTH_LONG).show()
                    }
                }else text.text = it.message})  
}
发布中继在
onCreate
方法中实例化。然后,我使用按钮调用重试方法:

retryBtn.setOnClickListener{
            publishRelay.retry(1)
        }

当我测试这个时,我没有得到任何东西(我确保有一个网络错误被调用),因此我可以通过单击按钮重试,但没有发生任何事情,重试不会发生。

您可以尝试
publishRelay。接受(1)
而不是
publishRelay。重试(1)
。我尝试过这个,但是我得到了一个Networkonmainthread异常。此外,不会调用来自初始请求的onError。(未达到我在OneError中设置的断点)。这意味着重试按钮未设置为可见。