数据刷新问题,null值判断会导致数据错乱.一个不正确的判断引发的血案.
狼烟的烟 2018-08-30 06:00:58 if (HeroModelConfig.getHeroModelsSize() != heroMap.size()) {
HeroModelConfig.getAllHeroModel().stream().forEach(model -> {
UserHero userHero = heroMap.get(model.getId());
if (userHero == null) {
userHero = generateUserHero(model, null);
heroMap.put(model.getId(), userHero);
updated = true;
} else if (userHero.getSkinId() <= 0) {
userHero = generateUserHero(model, userHero.getSkinMap());
userHero.setState(HeroHaveStateEnum.NONE.getState());
heroMap.put(userHero.getHeroId(), userHero);
updated = true;
} else {
userHero.setState(HeroHaveStateEnum.ALREADY_HAVE.getState());
heroMap.put(userHero.getHeroId(), userHero);
updated = true;
}
});
}
上面的代码逻辑:
遍历所有的hero原型,将玩家的数据heroMap中
没有的对象(userHero==null条件)初始化,并存储,初始化默认userHero的State字段为NONE;
其他情况:
userHero不为null,但是在skinId <=0 (此时可能出现getSkinId为null)时,设置玩家没有这个英雄,setState为NONE;
else情况会将这个内容设置为userHero的状态为Already_HVAE.
测试时导入线上数据进行数据的清洗,触发逻辑为玩家登录即执行上面代码,测试Ok.
上线后出现部分玩家的数据出现了全部将玩家数据洗成了NONE.....
有大神能帮忙分析下可能是哪里给错了这个数据吗?