Android合并双API响应数据适配RecyclerView时类型不匹配报错求助
解决方案
1. 定义合并后的数据模型类
你需要创建一个专门的模型类来容纳两个API合并后的所有字段,不要直接复用现有UsersData/PostData/SocialMediaData。比如对应你举例的场景:
// 根据实际业务调整类名,比如CombinedUserPostData data class CombinedItemData( val item_id: String, val item_name: String, val item_price: Double? // 设为可空,避免API2无对应数据时崩溃 )
2. 修正协程请求与数据合并逻辑
在fetchUsers函数中,并行请求两个API后,通过共同的item_id关联数据,生成合并后的列表,再包装成Resource<List<*>>类型:
fun fetchUsers() { viewModelScope.launch { try { // 并行发起两个API请求 val (api1Response, api2Response) = coroutineScope { val api1Deferred = async { yourApiService.getApi1Data() } val api2Deferred = async { yourApiService.getApi2Data() } api1Deferred.await() to api2Deferred.await() } // 将API2结果转为以item_id为Key的Map,提升匹配效率 val api2DataMap = api2Response.associateBy { it.item_id } // 遍历API1数据,匹配API2对应字段生成合并列表 val mergedDataList = api1Response.map { api1Item -> val matchedApi2Item = api2DataMap[api1Item.item_id] CombinedItemData( item_id = api1Item.item_id, item_name = api1Item.item_name, item_price = matchedApi2Item?.item_price ) } // 包装成Resource.Success发送到LiveData allUsersFromApi.postValue(Resource.Success(mergedDataList)) } catch (e: Exception) { // 处理请求失败场景 allUsersFromApi.postValue(Resource.Error(e.message ?: "数据请求失败")) } } }
3. 确认LiveData的类型定义
确保allUsersFromApi是对应合并后列表的Resource类型:
// 替换CombinedItemData为你实际的合并模型类 val allUsersFromApi: MutableLiveData<Resource<List<CombinedItemData>>> = MutableLiveData()
错误原因说明
你之前的类型不匹配问题,是因为allUsersFromApi要求传入Resource<List<*>>类型,但你直接传了单个SocialMediaData对象。核心解决逻辑是:必须将两个API的数据合并成列表,再用Resource的Success/Error包装后发送。
内容的提问来源于stack exchange,提问作者Bell Pepper Medialabs
相关产品推荐
相关产品推荐

