当出现错误时,我尝试使用发布中继重试可观察的链。这是我在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)
}
当我对此进行测试时,我什么也没得到(我确保有一个网络错误被调用),因此我可以通过单击按钮来重试,但是什么也没有发生,所以不会发生重试。