Android Kotlin协同路由通过链式网络请求获取数据
Q) 如何使用协同路由使用链接网络请求更新每个项目的viewModel 我试图从api中获取一些对象,但是api需要一个初始调用来获取objectId数组,然后通过一个包含objectId的单独调用来获取每个对象。我当前的实现将所有网络调用链接起来,但只有在整个循环完成后才会返回 例如: @获取…api/topItems返回[11112245456,…] @获取…api/项目?id=1111 @获取…api/项目?id=2245 等等 我的视图模型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
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(项目列表)
}
}这里也有同样的问题!有没有可能找到解决办法?