gpt4 book ai didi

android-room - 从android Room Architecture Component中的多对多结构中获取LiveData

转载 作者:行者123 更新时间:2023-12-04 02:47:25 29 4
gpt4 key购买 nike

让我们举一个基本的例子

用于存储用户的表

@Entity (tableName="users") 
class UsersEntity(
@PrimaryKey val id
var name:String,
...
)

用于存储角色的表
@Entity (tableName="roles") 
class RolesEntity(
@PrimaryKey val id
var name:String,
...
)

用于存储用户和角色之间多对多关系的表
@Entity (tableName="roles") 
class UserRoles(
@PrimaryKey val id
var userId:String,
var roleId:String
)

我的 View 中需要的 pojo 类
class user(
var id:String,
var name:String,
.... other fields
var roles: List<Role>
)

在我的 ViewModel我怎样才能通过 user结果为 LiveData还有 List<Role>填充?

从一般的方式来看,我可以:
  • UserDao.getUserById(id)返回 LiveData来自用户表和 RoleDao.getRolesForUserId(id)返回 LiveData包含用户的角色列表。然后在我的片段中,我可以做 viewModel.getUserById().observe{}viewModel.getRolesForUserId().observe{} .但这基本上意味着有 2 个观察员,我非常有信心这不是要走的路。
  • 可能其他方式是能够在我的存储库或 View 模型中以某种方式混合它们,以便它返回我需要的东西。我去查MediatorLiveData
  • 最佳答案

    使用用户及其角色创建不同的模型,并使用 @Embedded@Relation注释。

    举个例子:

    public class UserModel {
    @Embedded
    UserEntity user;
    @Relation(parentColumn = "id", entityColumn = "userId", entity = UserRoles.class)
    List<UserRoleModel> userRoles;
    }

    public class UserRoleModel {
    @Embedded
    UserRoles userRole;
    @Relation(parentColumn = "roleId", entityColumn = "id")
    List<RoleEntity> roles; // Only 1 item, but Room wants it to be a list.
    }

    您可以使用 UserModel从这里。

    关于android-room - 从android Room Architecture Component中的多对多结构中获取LiveData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51614101/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com