Android Kotlin协同路由通过链式网络请求获取数据

Android Kotlin协同路由通过链式网络请求获取数据,kotlin,android-livedata,kotlin-coroutines,mediator,android-mvvm,Kotlin,Android Livedata,Kotlin Coroutines,Mediator,Android Mvvm,Q) 如何使用协同路由使用链接网络请求更新每个项目的viewModel 我试图从api中获取一些对象,但是api需要一个初始调用来获取objectId数组,然后通过一个包含objectId的单独调用来获取每个对象。我当前的实现将所有网络调用链接起来,但只有在整个循环完成后才会返回 例如: @获取…api/topItems返回[11112245456,…] @获取…api/项目?id=1111 @获取…api/项目?id=2245 等等 我的视图模型 class FeedItemListViewM

Q) 如何使用协同路由使用链接网络请求更新每个项目的viewModel

我试图从api中获取一些对象,但是api需要一个初始调用来获取objectId数组,然后通过一个包含objectId的单独调用来获取每个对象。我当前的实现将所有网络调用链接起来,但只有在整个循环完成后才会返回

例如:

@获取…api/topItems返回[11112245456,…]

@获取…api/项目?id=1111

@获取…api/项目?id=2245

等等

我的视图模型

class FeedItemListViewModel(
private val retrieveItemsFromApiUseCase: RetrieveItemsFromApiUseCase
) : ViewModel() {

private val _feedItemsFromApi = MutableLiveData<List<FeedItem>>()

val feedItemsFromApi: LiveData<List<FeedItem>>
    get() = _feedItemsFromApi

fun retrieveFeedItemsFromApi() {
    viewModelScope.launch {
        val result = retrieveItemsFromApiUseCase.invoke("topItems")
        when (result) {
            is NetworkResult.Success -> {
                _feedItemsFromApi.postValue(result.data)
            }
            is NetworkResult.Error -> Timber.d("no feed items from api ${result.exception}")
        }
    }
}
类FeedItemListViewModel(
private val retrieveItemsFromApiUseCase:retrieveItemsFromApiUseCase
):ViewModel(){
private val_feedItemsFromApi=MutableLiveData()
val feedItemsFromApi:LiveData
get()=\u feedItemsFromApi
乐趣检索FeedItemsFromapi(){
viewModelScope.launch{
val result=retrieveItemsFromApiUseCase.invoke(“topItems”)
何时(结果){
是NetworkResult。成功->{
_feedItemsFromApi.postValue(result.data)
}
是NetworkResult.Error->Timber.d(“api${result.exception}中没有提要项”)
}
}
}
}

检索项目罗马用例

class RetrieveItemsFromApiUseCase(private val repository: InMemoryRepository) {

suspend operator fun invoke(feedType: String): NetworkResult<List<FeedItem>> = withContext(Dispatchers.IO) {
    val itemList: MutableList<FeedItem> = mutableListOf()
    val result = repository.fetchTopItems()
    when (result) {
        is NetworkResult.Success -> {
            itemList.addAll(result.data)
            for (i in 0..9) {
                val emptyItem = result.data[i]
                val response = repository.fetchItem(emptyItem.id)
                when (response) {
                    is NetworkResult.Success -> {
                        val item = response.data
                        emptyItem.setProperties(item)
                    }
                }
            }
        }
        is NetworkResult.Error -> return@withContext result
    }
    return@withContext NetworkResult.Success(itemList)
}
class RetrieveItemsFromApiUseCase(私有val存储库:InMemoryRepository){
挂起运算符调用(feedType:String):NetworkResult=withContext(Dispatchers.IO){
val itemList:MutableList=mutableListOf()
val result=repository.fetchTopItems()
何时(结果){
是NetworkResult。成功->{
itemList.addAll(result.data)
对于(0..9中的i){
val emptyItem=result.data[i]
val response=repository.fetchItem(emptyItem.id)
何时(回应){
是NetworkResult。成功->{
val item=response.data
emptyItem.setProperties(项目)
}
}
}
}
是NetworkResult。错误->return@withContext结果
}
return@withContextNetworkResult.Success(项目列表)
}

}

这里也有同样的问题!有没有可能找到解决办法?