将数据模型转换为 Android 中的另一个和 api 调用

Posted

技术标签:

【中文标题】将数据模型转换为 Android 中的另一个和 api 调用【英文标题】:translate a data model to another and api call in Android 【发布时间】:2021-07-23 09:06:04 【问题描述】:

我正在尝试将一个数据类映射到另一个数据类,但在此过程中我还需要调用以获取附加信息

下面的代码是一个基本的协程调用

override suspend fun getUsersList(
    name: String?): ResultList<List<GitHubUserListResult>> =
    withContext(ioDispatcher) 
        val request = api.searchUsers(name)
        request.data --> contain the list of `User`
        
        //map User to GitHubUserListResult and place api all to recover the missing information
         
        ResultList.Success(emptyList()) --> will be the list of `GitHubUserListResult`
    

数据类用户是:

data class User (
    val login: String?,
    val avatar_url: String
)

数据类GitHubUserListResult:

data class GitHubUserListResult (
    val login: String?,
    val avatar_url: String,
    val public_repos: Int
)

public_repos 需要对 api.getUsernameInfo(username) 进行新的 api 调用以恢复 repos 的数量,然后将其添加到 GitHubUserListResult

api.getUsernameInfo(username) 将返回以下数据类:

data class UserInfo (
    val public_repos: Int
)

知道如何进行此映射和 api 调用吗?

【问题讨论】:

【参考方案1】:
override suspend fun getUsersList(name: String?): ResultList<List<GitHubUserListResult>> = withContext(Dispatchers.IO)
    val asyncJobs = api.searchUsers(name).map  user ->
       async  getGithubInformation(user) 
    
    return ResultList.Success(asyncJobs.awaitAll())

您可能必须包含一些用于捕获异常并转换为 ResultList.Error 之类的逻辑

【讨论】:

感谢罗伯特 asyncJobs。只返回 List 不返回 List

以上是关于将数据模型转换为 Android 中的另一个和 api 调用的主要内容,如果未能解决你的问题,请参考以下文章

如何将可绘制背景设置为仅将数字字符串转换为 android 中的另一个字符串?

从一个复制并转换为 Core Data 中的另一个属性

Drools将一个对象的列表转换为drools中的另一个对象的列表

将行值转换为列,其值来自 spark scala 中的另一列 [重复]

将权重设置为具有附加层的另一个模型

如何获取复制到剪贴板的数据值并将其设置为android studio中的另一个值