Search code examples
androidexceptionadmobrewardedvideoad

AdMob Rewarded Video Ad error (exception)


Admob RewardedVideoAd sometimes does not show video. For the first time, advertising is always shown. For the second or third time, advertising is not shown. In this case, I get such a log:

03-24 13:08:26.754 4458-4458/net.dailytoys.afterthecrash W/Ads: Could not show rewarded video ad from adapter.
                                                                java.lang.NullPointerException: Attempt to read from field 'com.google.android.gms.ads.internal.client.bp hu.a' on a null object reference
                                                                    at com.google.ads.mediation.a.h(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):356)
                                                                    at com.google.android.gms.ads.internal.mediation.client.y.f(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):208)
                                                                    at com.google.android.gms.ads.internal.reward.a.a(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):41)
                                                                    at com.google.android.gms.ads.internal.reward.c.a(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):18)
                                                                    at com.google.android.gms.ads.internal.reward.client.e.onTransact(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):11)
                                                                    at android.os.Binder.transact(Binder.java:388)
                                                                    at com.google.android.gms.internal.zzeu.zzb(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadm.show(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadx.show(Unknown Source)
                                                                    at net.dailytoys.afterthecrash.ActionResolverAndroid$2.run(ActionResolverAndroid.java:86)
                                                                    at android.os.Handler.handleCallback(Handler.java:815)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                    at android.os.Looper.loop(Looper.java:194)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5877)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1015)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)
03-24 13:08:26.755 4458-4458/net.dailytoys.afterthecrash W/Ads: Could not call showVideo.
                                                                android.os.RemoteException
                                                                    at com.google.android.gms.ads.internal.mediation.client.y.f(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):212)
                                                                    at com.google.android.gms.ads.internal.reward.a.a(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):41)
                                                                    at com.google.android.gms.ads.internal.reward.c.a(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):18)
                                                                    at com.google.android.gms.ads.internal.reward.client.e.onTransact(com.google.android.gms.DynamiteModulesA@[email protected] (246-188803320):11)
                                                                    at android.os.Binder.transact(Binder.java:388)
                                                                    at com.google.android.gms.internal.zzeu.zzb(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadm.show(Unknown Source)
                                                                    at com.google.android.gms.internal.zzadx.show(Unknown Source)
                                                                    at net.dailytoys.afterthecrash.ActionResolverAndroid$2.run(ActionResolverAndroid.java:86)
                                                                    at android.os.Handler.handleCallback(Handler.java:815)
                                                                    at android.os.Handler.dispatchMessage(Handler.java:104)
                                                                    at android.os.Looper.loop(Looper.java:194)
                                                                    at android.app.ActivityThread.main(ActivityThread.java:5877)
                                                                    at java.lang.reflect.Method.invoke(Native Method)
                                                                    at java.lang.reflect.Method.invoke(Method.java:372)
                                                                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1015)
                                                                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:810)

My init method:

private void initAdMob () {
        MobileAds.initialize(this, AD_MOB_ID);
        mRewardedVideoBonusAd = MobileAds.getRewardedVideoAdInstance(this);
        mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());

        mRewardedVideoBonusAd.setRewardedVideoAdListener(new RewardedVideoAdListener() {
            @Override
            public void onRewardedVideoAdLoaded() {
                System.out.println(adLogPrefix + " rewarded (bonus) loaded.");
            }

            @Override
            public void onRewardedVideoAdClosed() {
                System.out.println(adLogPrefix + " rewarded (bonus) closed.");
                mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
            }

            @Override
            public void onRewarded(RewardItem rewardItem) {
                mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
            }

            @Override
            public void onRewardedVideoAdFailedToLoad(int i) {
                actionResolverAndroid.logAnalyticEvent(AnalyticsKeys.AD_ERR_LOADING_REW_VIDEO);
                new Handler().postDelayed(
                        new Runnable() {
                            @Override
                            public void run() {
                                mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
                            }
                        },
                        1000 * 15 // 15 seconds
                );
                System.out.println(adLogPrefix + " error loading rew (bonus).");
            }
        });
    }

I did everything as it is written in the official documentation. What could be the problem?


Solution

  • This is a known issue with AdMob rewarded videos.

    Consider removing the request from the Rewarded-Callback and leave it in Closed-Callback, so you don't have both, and they can't interfere with each other.

    @Override
    public void onRewardedVideoAdClosed() {
        System.out.println(adLogPrefix + " rewarded (bonus) closed.");
        // REMOVE THIS LINE BELOW
        mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
    }
    
    @Override
    public void onRewarded(RewardItem rewardItem) {
        mRewardedVideoBonusAd.loadAd(ID_REW_BONUS, new AdRequest.Builder().build());
    }