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

时间:2018-08-09 16:17:58

标签: android kotlin rx-java retrofit rx-android

当出现错误时,我尝试使用发布中继重试可观察的链。这是我在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)
        }

当我对此进行测试时,我什么也没得到(我确保有一个网络错误被调用),因此我可以通过单击按钮来重试,但是什么也没有发生,所以不会发生重试。

0 个答案:

没有答案