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中设置的断点)。这意味着重试按钮未设置为可见。