我正在使用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。这里的问题是,如果在两个片段中使用相同的观察者,并且一个片段在堆栈中,另一个片段在顶部,则响应变为...
这个问题目前缺乏很多细节,感觉就像我们在用伪代码说话一样。什么是“同一观察者”?这些Observable
在哪里订阅?两个Fragment
是否都希望接收API调用的结果,但仅接收当前显示的那个?然后,您需要将API调用生命周期与Fragment
分开,并让Fragment
观察随API调用的结果而更新的内容(例如数据库)。