如何依次检查三个广告加载条件?现有代码仅执行第一个块求排查
问题排查与修复方案
核心问题分析
你的代码存在几个关键错误,导致只有第一个广告块会执行:
- 硬赋值变量锁死第一个分支:你把
hi直接设为1,hi !=1的条件永远不成立,后面检查第二个、第三个广告的代码根本不会运行。 - 完全没实现“检查广告是否已加载”的逻辑:你直接调用
loadAd()加载广告,但需求是检查广告已经加载完成后再执行展示,你的代码既没判断加载状态,也混淆了“加载”和“执行(展示)”的动作。 - switch case完全冗余:变量都是硬赋值的,比如
hi=1必然走case1,这种写法完全没意义,反而把逻辑搞复杂了。
正确实现思路
按需求的优先级顺序,依次检查广告的加载状态:
- 先判断第一个广告是否已加载(用AdMob的
isLoaded()方法),是就展示它,结束流程; - 若第一个没加载,判断第二个广告是否已加载,是就展示;
- 前两个都没加载,再处理第三个广告。
注意:loadAd()是加载广告的方法,而“执行广告”通常指展示广告(比如show()方法),别把加载和展示搞混。
修正后的代码示例
//Variable for changing ads mDatabase = FirebaseDatabase.getInstance().getReference("Reklama"); mDatabase.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { // 创建广告请求 final AdRequest adRequest = new AdRequest.Builder().build(); int Reklama = Math.toIntExact((Long) snapshot.getValue()); if (Reklama == 1) { // 按优先级检查插屏广告 if (mInterstitialAd != null && mInterstitialAd.isLoaded()) { // 第一个广告已加载,执行展示 mInterstitialAd.show(YourActivity.this); } else if (mInterstitialAdMid != null && mInterstitialAdMid.isLoaded()) { // 第一个没加载,检查第二个 mInterstitialAdMid.show(YourActivity.this); } else if (mInterstitialAdLow != null && mInterstitialAdLow.isLoaded()) { // 前两个都没加载,检查第三个 mInterstitialAdLow.show(YourActivity.this); } else { // 所有广告都没加载,触发加载逻辑 mInterstitialAd.loadAd(adRequest); mInterstitialAdMid.loadAd(adRequest); mInterstitialAdLow.loadAd(adRequest); } } else if (Reklama == 2) { // 按优先级检查激励广告 if (mRewardedAd != null && mRewardedAd.isLoaded()) { mRewardedAd.show(YourActivity.this, new RewardedAdCallback() { @Override public void onUserEarnedReward(@NonNull RewardItem rewardItem) { // 处理用户获得奖励的逻辑 } }); } else if (mRewardedAdMid != null && mRewardedAdMid.isLoaded()) { mRewardedAdMid.show(YourActivity.this, new RewardedAdCallback() { @Override public void onUserEarnedReward(@NonNull RewardItem rewardItem) { // 处理奖励逻辑 } }); } else if (mRewardedAdLow != null && mRewardedAdLow.isLoaded()) { mRewardedAdLow.show(YourActivity.this, new RewardedAdCallback() { @Override public void onUserEarnedReward(@NonNull RewardItem rewardItem) { // 处理奖励逻辑 } }); } else { // 所有激励广告都没加载,触发加载 mRewardedAd.loadAd(adRequest); mRewardedAdMid.loadAd(adRequest); mRewardedAdLow.loadAd(adRequest); } } } @Override public void onCancelled(@NonNull DatabaseError error) { // 处理数据库读取失败的情况 } });
额外说明
- 替换代码中的
YourActivity.this为当前的Activity实例; - 激励广告展示需要传入回调处理奖励逻辑,根据你的业务需求调整;
- 如果你的“执行广告”确实是指加载广告(而非展示),可调整逻辑为:先检查第一个是否已加载,没加载才去加载它,否则跳过。
内容的提问来源于stack exchange,提问作者ploxo
相关产品推荐
相关产品推荐

