Android Studio中如何检测mLevel变量首次升级到特定等级?
等级首次升级检测的实现方案
要检测首次升级到特定等级的情况,核心是记录用户已经解锁过的等级,避免重复触发升级逻辑。以下是修改后的实现代码和关键点说明:
核心思路
- 新增一个布尔数组
mLevelUnlocked,用来跟踪每个等级是否已经解锁(因为等级范围固定为1-10,数组查询效率更高)。 - 在更新经验后自动计算等级,对比新旧等级,只有当新等级更高且未被解锁时,才触发首次升级逻辑,并标记该等级为已解锁。
修改后的完整代码
public class UserModel { private static int mExperience; private static int mLevel; // 索引0闲置,索引1-10对应等级1-10,记录是否已解锁 private static boolean[] mLevelUnlocked = new boolean[11]; public int getExperience() { return mExperience; } public void setExperience(int experience) { mExperience = experience; // 设置经验后自动计算等级,保证经验与等级同步 calculateLevel(experience); } public int getLevel() { return mLevel; } private void calculateLevel(int experience) { int newLevel; if(experience < 80){ newLevel = 1; }else if(experience >= 80 && experience <270){ newLevel = 2; }else if(experience >= 270 && experience <640){ newLevel = 3; } else if(experience >= 640 && experience <1250){ newLevel = 4; }else if(experience >= 1250 && experience <2160){ newLevel = 5; }else if(experience >= 2160 && experience <3430){ newLevel = 6; }else if(experience >= 3430 && experience <5120){ newLevel = 7; }else if(experience >= 5120 && experience <7290){ newLevel = 8; }else if(experience >= 7290 && experience <10000){ newLevel = 9; }else{ newLevel = 10; } // 仅当等级提升且该等级未解锁时,触发首次升级逻辑 if (newLevel > mLevel && !mLevelUnlocked[newLevel]) { mLevelUnlocked[newLevel] = true; mLevel = newLevel; // 这里执行首次升级的业务逻辑,比如发奖励、弹提示 onFirstLevelUp(newLevel); } else { // 等级未提升或已解锁,直接更新等级 mLevel = newLevel; } } // 首次升级回调,可根据需求调整逻辑 private void onFirstLevelUp(int level) { System.out.println("首次升级到等级" + level); // 示例:添加奖励发放、UI通知等逻辑 } }
关键细节
- 自动同步经验与等级:把等级计算逻辑放到
setExperience里自动执行,避免外部手动调用导致经验和等级不一致。 - 避免重复触发:通过
mLevelUnlocked标记已解锁的等级,确保每个等级的首次升级逻辑只会执行一次。 - 持久化处理:如果需要重启App后保留已解锁等级的记录,要把
mLevelUnlocked的数据保存到本地存储(如SharedPreferences、SQLite)。
内容的提问来源于stack exchange,提问作者LuCC
相关产品推荐
相关产品推荐

