任何方法使队列在观察



我有一个函数有另一个调用

private fun request(){
listener.onRequest(::setList)
}
private fun setList(list: List<Items>) {
when(listType){ // listType is type of list which one should be used
ViewUtils.SIMPLE -> setSimpleList(list)
ViewUtils.TOUCHABLE -> setTouchableList(list)
else -> createAdapter(list)
}
}

onRequest在其他地方重写。onRequest应该从API获取数据并返回

override fun onRequest(
setList: (List<Items>) -> Unit
) {
if (mViewModel.listItemsResult.value.isNullOrEmpty()){
mViewModel.loadListItems()
}
mViewModel.listItemsResult.observe(viewLifecycleOwner){
setList(it ?: listOf()))
}
}

ViewModel从API获取数据并将其发布到listtitemsresult哪一个是MutableLiveData<List<ListItems>>

fun loadListItems() {
viewModelScope.launch(Dispatchers.Default) {
try {
val items = doRequestListSource()
listItemsResult.postValue(items)
} catch (ex: Exception) {
Log.e("getListItems", ex.message ?: "unknown error")
}
}
}

doRequestListSource()从API获取数据。

。我有1个或多个对象,其中一个包含request()函数。这些对象调用onRequest来获取中相同的中的数据。时间。之后从API接收的数据()对于每个对象的数据量是不同的) .

问题:请求没有得到任何队列,如果有人比其他人更快地得到响应,那么它将获取该数据。

的例子:

期望
(同一时间)

1 request -- 1 response (has medium volume of data)
2 request -- 2 response (has huge volume of data)
3 request -- 3 response (empty list)

现实
(同一时间)

1 request -- 3 response (empty list)
2 request -- 1 response (has medium volume of data)
3 request -- 2 response (has huge volume of data)

是否有任何解决方案,使队列从viewModel获取数据?

我认为你需要同步api调用而不是观察者。

你可以这样做

var previuosJob: Job? = null
fun loadListItems() {
previiuosJob?.join()
prpeviousJob = viewModelScope.launch(Dispatchers.Default) {
try {
val items = doRequestListSource()
listItemsResult.postValue(items)
} catch (ex: Exception) {
Log.e("getListItems", ex.message ?: "unknown error")
}
}
}