You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何依次检查三个广告加载条件?现有代码仅执行第一个块求排查

问题排查与修复方案

核心问题分析

你的代码存在几个关键错误,导致只有第一个广告块会执行:

  1. 硬赋值变量锁死第一个分支:你把hi直接设为1,hi !=1的条件永远不成立,后面检查第二个、第三个广告的代码根本不会运行。
  2. 完全没实现“检查广告是否已加载”的逻辑:你直接调用loadAd()加载广告,但需求是检查广告已经加载完成后再执行展示,你的代码既没判断加载状态,也混淆了“加载”和“执行(展示)”的动作。
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:40:31