Я использую Rx Java, чтобы использовать API в моем приложении android. Проблема здесь в том, что если использовать один и тот же наблюдатель в двух фрагментах, и один фрагмент находится в backstack, а другой находится сверху, то ответ получен в обоих фрагментах, но это не то, что я хочу. Точный случай здесь:
При нажатии кнопки выполняется запрос 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()
}
}
теперь перед приходом ответа, если пользователь переключается на другой фрагмент, у которого тоже есть тот же Наблюдатель, после чего ответ получен в этом фрагменте, так как мне избавиться от него перед миграцией на другой фрагмент?