Добавьте вспомогательный метод observeOnce
к вашему классу PagedKeyedDataSource, который прослушивает единственное первое обновление объекта LiveData
.
fun <T> LiveData<T>.observeOnce(observer: Observer<T>) {
observeForever(object : Observer<T> {
override fun onChanged(t: T?) {
observer.onChanged(t)
removeObserver(this)
}
})
}
В вашем файле build.gradle уровня приложения. Добавьте это
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.1.1'
Затем вызовите метод observeOnce
для вашего LiveData
объекта, который наблюдает только за первым обновлением вашего LiveData
объекта, а затем вызывает callback.onSuccess.
GlobalScope.launch(Dispatchers.Main) {
val observer = Observer<List<Cars>>{
callback.onResult(it, null, "dsd")
}
yourLiveDataObj.observeOnce<List<Cars>>(observer)
}
РЕДАКТИРОВАТЬ
Вместо использования LiveData вы можете использовать интерфейсы для достижения той же цели. Объявите универсальный интерфейс
interface ApiCallback<T>{
fun onSuccess(result: T)
fun onFailure(errMsg:String)
}
В вашем PagedKeyDataSource
getSomeCars(object : ApiCallback<List<Cars>>{
override fun onSuccess(result: List<Cars>) {
callback.onResult(result, null, "dsd")
}
override fun onFailure(errMsg: String) {
Log.w("get some cars failed with err: $errMsg")
}
})
В getSomeCars()
функция
fun getSomeCars(apiCallback:ApiCallback<List<Cars>>){
//after your multiple api calls call
apiCallback.onSuccess(carListResults)
}