3

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@12221246@12.2.21 (246-188803320):356)
                                                                    at com.google.android.gms.ads.internal.mediation.client.y.f(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):208)
                                                                    at com.google.android.gms.ads.internal.reward.a.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):41)
                                                                    at com.google.android.gms.ads.internal.reward.c.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):18)
                                                                    at com.google.android.gms.ads.internal.reward.client.e.onTransact(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (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@12221246@12.2.21 (246-188803320):212)
                                                                    at com.google.android.gms.ads.internal.reward.a.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):41)
                                                                    at com.google.android.gms.ads.internal.reward.c.a(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (246-188803320):18)
                                                                    at com.google.android.gms.ads.internal.reward.client.e.onTransact(com.google.android.gms.DynamiteModulesA@12221246@12.2.21 (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?

Pasha Oleynik
  • 477
  • 5
  • 21

1 Answers1

3

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());
}
Sergey Emeliyanov
  • 5,158
  • 6
  • 29
  • 52
  • What you are saying is different than what's in your code. Should it be removed from `onRewardedVideoAdClosed()` or from `onRewarded()` ? – hiddeneyes02 Sep 11 '18 at 07:27