在 MainActivity 中加载激励广告仍然为空

Loading a Rewarded Ad in MainActivity remains null

我正在尝试在 MainActivity 中加载一个 RewardedAd 对象,然后在另一个 activity 中访问该对象。

主要活动:

var rewardedAd: RewardedAd? = null

private fun createAndLoadRewardedAd(adUnitId: String): RewardedAd {
    val ad = RewardedAd(this, adUnitId)
    val adLoadCallback = object : RewardedAdLoadCallback() {
        override fun onRewardedAdLoaded() {
            // Ad successfully loaded.
            println("Ad successfully loaded.")
        }

        override fun onRewardedAdFailedToLoad(adError: LoadAdError?) {
            // Ad failed to load.
            println("Ad failed to load.")
        }
    }
    ad.loadAd(AdRequest.Builder().build(), adLoadCallback)
    return ad
}

并且在 onCreate(savedInstanceState: Bundle?) 中我设置了值:

rewardedAd = createAndLoadRewardedAd(StaticAppData.rewardedAdID)
println("MAINACTIVITY - $rewardedAd")

在 App Load 上,打印语句的值设置为 rewardedAd;它不为空。

现在,当我尝试在另一个 activity 中访问 rewardedAd(以实际显示激励广告)时,它为空。

addCoinsButtonPressed.setOnClickListener {
    println(MainActivity().rewardedAd)
}

prints `null`.

在 MainActivity 中加载后,如何从另一个 activity 访问 rewardedAd?

MainActivity() 是构造函数,这意味着您正在尝试在新实例上访问此变量。

要在活动之间共享变量,您可以将其放在静态上下文中,例如

class MainActivity : Activity {
    companion object {
        var rewardedAd: RewardedAd? = null
    }
...
}

然后用MainActivity.rewardedAd访问它。

请注意,虽然这是一个简单的解决方案,但全局可变变量是不好的做法,应该避免。使用例如改为后台服务。