【问题标题】:Room flowable invokes multiple times房间可流动多次调用
【发布时间】:2018-02-02 15:06:14
【问题描述】:

我的 TeamDao 中有这个

@Query("select * from teams where id = :teamId")
    Flowable<Team> getRivals(int teamId);

我是这样订阅的

teamRepository.getRivals(61).
                distinctUntilChanged().
                observeOn(SchedulerProvider.getInstance().ui()).

                subscribeOn(SchedulerProvider.getInstance().computation())
                .subscribe(team -> Log.d("HomeActivity", team.getName()));

只要 Team 表的任何行发生任何变化,无论它的 id 是否为 61,我都会看到我的这个订阅者在调用。

我在博客上读到 distinctUntilChanged() 正是用来避免这种情况的。

我的 POJO 团队是这样的

@Entity(tableName = "teams",
        foreignKeys = {
                @ForeignKey
                        (entity = User.class,
                                parentColumns = "id",
                                childColumns = "userId",
                                onDelete = ForeignKey.CASCADE),
                @ForeignKey
                        (entity = Neighbourhood.class,
                                parentColumns = "id",
                                childColumns = "neighbourhoodId"
                        )})
public class Team {

    @PrimaryKey
    int id;
    private String name;
    private String imageUrl;

    @Embedded(prefix = "ladder_")
    Ladder ladder;



    //    USE RELATIONS WITH @Relation()
    //relations
    private int userId;
    private int neighbourhoodId;
    private int skillLevelId;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getImageUrl() {
        return imageUrl;
    }

    public void setImageUrl(String imageUrl) {
        this.imageUrl = imageUrl;
    }


    public Neighbourhood getNeighbourhood() {
        return neighbourhood;
    }

    public void setNeighbourhood(Neighbourhood neighbourhood) {
        this.neighbourhood = neighbourhood;
    }

    public List<TeamMember> getTeamMemberList() {
        return teamMemberList;
    }

    public void setTeamMemberList(List<TeamMember> teamMemberList) {
        this.teamMemberList = teamMemberList;
    }


    public int getNeighbourhoodId() {
        return neighbourhoodId;
    }

    public void setNeighbourhoodId(int neighbourhoodId) {
        this.neighbourhoodId = neighbourhoodId;
    }

    public int getSkillLevelId() {
        return skillLevelId;
    }

    public void setSkillLevelId(int skillLevelId) {
        this.skillLevelId = skillLevelId;
    }

    public List<Sport> getSports() {
        return sports;
    }

    public void setSports(List<Sport> sportList) {
        this.sports = sportList;
    }

    public Ladder getLadder() {
        return ladder;
    }

    public void setLadder(Ladder ladder) {
        this.ladder = ladder;
    }

    public List<MatchRequest> getMatchRequests() {
        return matchRequests;
    }

    public void setMatchRequests(List<MatchRequest> matchRequests) {
        this.matchRequests = matchRequests;
    }
}

任何指针?

【问题讨论】:

  • 您的Team 类是否正确实现equals
  • 好吧。它没有。这也是必需品吗?我将发布我的团队课程
  • @akarnokd 发表您的评论作为答案。你成功了

标签: android rx-java2 rx-android android-room


【解决方案1】:

使用distinctdistinctUntilChanged() 时,您需要在流式传输的类型中实现正确的Object.equals,因为这些运算符使用equals 来比较项目(因为这是Java 集合中的惯用方式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多