在多个片段中使用同一观察者,并且仅在可见片段中接收响应,而在后堆栈中不接收响应]]

问题描述 投票:0回答:1

我正在使用RxJava在我的android应用中访问该API。这里的问题是,如果在两个片段中使用相同的观察者,一个片段位于后堆栈中,另一个片段位于顶部,则两个片段都收到响应,但这不是我想要的。确切的情况是:

在按钮上单击,使用以下方法发出API请求:

userModel.hitAPi("12", myList)

并且使用以下方法观察:

 val obs = userModel.responseAPI.observe(this,
            Observer {
                if (it != null) {
                    if(it.httpCode == 200)
                        Log.e(TAG, "Response: " + it.toString())
                    else{
                        Log.e(TAG, "Response: " + it.toString())
                    }
                }
            })

这里是ViewModel类:

 class UserViewModel: ViewModel() {

    private val cd = CompositeDisposable()
    val status: MutableLiveData<Boolean>? = MutableLiveData<Boolean>()

    val responseAPI = MutableLiveData<ResponseAdd>()
    fun hitAPi(userID: String, items: ArrayList<Item>){
        val myModel = ModelAdd("",items,"in",userID,"" )
        cd.add(
            RetrofitHelper.apiInstance.addToCart(myModel)
                .myApiSubscriber(status)
                .subscribe({
                    responseAPI.postValue(it)
                },{
                    it.printStackTrace()
                })
        )
    }

       private fun <T> Single<T>.myApiSubscriber(status: MutableLiveData<Boolean>?): Single<T> {
        return this.doOnSubscribe {
            status?.postValue(true)
            Utils.debugger("PROGRESS ", " doOnSubscribe")
        }.doFinally {
            status?.postValue(false)
            Utils.debugger("PROGRESS ", " doFinally")
        }.subscribeOn(Schedulers.io())
    }

    override fun onCleared() {
        cd.dispose()
        super.onCleared()
    }
}

现在来响应之前,如果用户也切换到具有相同观察者的另一个片段,那么该片段中会收到响应,因此在迁移到另一个片段之前我该如何处置它?

我正在使用RxJava在我的android应用中访问该API。这里的问题是,如果在两个片段中使用相同的观察者,并且一个片段在堆栈中,另一个片段在顶部,则响应变为...

android rx-java2 rx-android
1个回答
0
投票

这个问题目前缺乏很多细节,感觉就像我们在用伪代码说话一样。什么是“同一观察者”?这些Observable在哪里订阅?两个Fragment是否都希望接收API调用的结果,但仅接收当前显示的那个?然后,您需要将API调用生命周期与Fragment分开,并让Fragment观察随API调用的结果而更新的内容(例如数据库)。

© www.soinside.com 2019 - 2024. All rights reserved.