java.lang.IllegalStateException: You can't call show() for ad in state ERROR (After Splash)

Viewed 937

Halo,

I want to ask about my project, I tried to apply the Audience Network to my application, exactly after the splash screen and code like this ...

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.facebook.ads.Ad;
import com.facebook.ads.AdError;
import com.facebook.ads.InterstitialAdListener;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import com...Config;
import com...R;

import com.facebook.ads.*;

import static com.facebook.ads.AdSettings.IntegrationErrorMode.INTEGRATION_ERROR_CALLBACK_MODE;
import static com.facebook.ads.AdSettings.IntegrationErrorMode.INTEGRATION_ERROR_CRASH_DEBUG_MODE;

public class ActivitySplash extends AppCompatActivity {

    private InterstitialAd interstitialAd;
    private com.facebook.ads.InterstitialAd interstitialAdFB;
    private static final int RC_READ_WRITE_EXTERNAL_STORAGE_PERM = 125;
    Context context = this;
    MainActivity mActivity= new MainActivity();


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_splash);


        FbAdLoad();

        if (Config.ENABLE_ADMOB_ON_LOAD) {

            loadInterstitialAd();
        } else {

            Log.d("AdMob", "Interstitial on load is disabled");
        }

        new CountDownTimer(3000, 1000) {
            @Override
            public void onFinish() {
                Intent intent = new Intent(getBaseContext(), MainActivity.class);
                startActivity(intent);
                finish();


                f (Config.ENABLE_ADMOB_ON_LOAD) {

                    if (interstitialAd.isLoaded()) {
                        interstitialAd.show();
                    }else{
                         interstitialAdFB.show();
                    }
                } else {
                    Log.d("AdMob", "Interstitial on load is disabled");
                }
            }

            @Override
            public void onTick(long millisUntilFinished) {

            }
        }.start();

    }

    private void FbAdLoad(){
        //com.facebook.ads.AdSettings.setIntegrationErrorMode(INTEGRATION_ERROR_CALLBACK_MODE);
        //interstitialAd = new InterstitialAd(this, "YOUR_PLACEMENT_ID");
       // interstitialAdFB = new com.facebook.ads.InterstitialAd(getApplicationContext());
        interstitialAdFB = new com.facebook.ads.InterstitialAd(context, getString(R.string.PlacementID));
        interstitialAdFB.setAdListener(new InterstitialAdListener() {
            @Override
            public void onInterstitialDisplayed(Ad ad) {
                // Interstitial ad displayed callback
              //  Log.e(TAG, "Interstitial ad displayed.");
            }

            @Override
            public void onInterstitialDismissed(Ad ad) {
                // Interstitial dismissed callback
              //  Log.e(TAG, "Interstitial ad dismissed.");
            }

            @Override
            public void onError(Ad ad, AdError adError) {
                // Ad error callback
               // Log.e(TAG, "Interstitial ad failed to load: " + adError.getErrorMessage());
            }

            @Override
            public void onAdLoaded(Ad ad) {
                // Interstitial ad is loaded and ready to be displayed
                //Log.d(TAG, "Interstitial ad is loaded and ready to be displayed!");
                // Show the ad
                //interstitialAdFB.show();
            }

            @Override
            public void onAdClicked(Ad ad) {
                // Ad clicked callback
               // Log.d(TAG, "Interstitial ad clicked!");
            }

            @Override
            public void onLoggingImpression(Ad ad) {
                // Ad impression logged callback
              //  Log.d(TAG, "Interstitial ad impression logged!");
            }
        });



        // For auto play video ads, it's recommended to load the ad
        // at least 30 seconds before it is shown
        interstitialAdFB.loadAd();

    }



    private void loadInterstitialAd() {
        Log.d("TAG", "showAd");
        interstitialAd = new InterstitialAd(getApplicationContext());
        interstitialAd.setAdUnitId(getResources().getString(R.string.admob_interstitial_id));
        interstitialAd.loadAd(new AdRequest.Builder().build());
        interstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {

            }
        });
    }

}

And after run, I found an error like this

java.lang.IllegalStateException: You can't call show() for ad in state ERROR. You can change Integration Error mode by setting AdSettings.setIntegrationErrorMode() at com.facebook.ads.internal.c.a.a(Unknown Source) at com.facebook.ads.internal.c.f.a(Unknown Source) at com.facebook.ads.InterstitialAd.show(Unknown Source) at com.zahyakarin.BTSWallpapersKPOPNewHD.fragments.FragmentRecent.showInterstitialAd(FragmentRecent.java:463) at com.zahyakarin.BTSWallpapersKPOPNewHD.fragments.FragmentRecent.access$000(FragmentRecent.java:55) at com.zahyakarin.BTSWallpapersKPOPNewHD.fragments.FragmentRecent$1$1.run(FragmentRecent.java:117) at android.os.Handler.handleCallback(Handler.java:754) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:165) at android.app.ActivityThread.main(ActivityThread.java:6354) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:883) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)

What should I do to resolve this error?

Thank you..

0 Answers
Related