How to show interstitial ads after uploading the home screen?



  • I need help, I would like to display an interstitial ad after the initial screen loads, but my code is giving the following failure:

    java.lang.IllegalStateException: isLoaded must be called on the main UI thread.

    Here's my code:

    public class SplashScreenActivity extends AppCompatActivity {
    
    InterstitialAd mInterstitialAd;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);
    
        // FIREBASE INTERSTICIAL
        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId("ca-app-pub-2565065222479596/3931476543");
    
        mInterstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdClosed() {
                requestNewInterstitial();
            }
        });
    
        requestNewInterstitial();
    
        Toast.makeText(this,"* Necessário Acesso a Internet *",Toast.LENGTH_LONG).show();
    
        Thread timerThread = new Thread() {
            public void run() {
                try {
                    sleep(5000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
    
                    if (mInterstitialAd.isLoaded()) {
                        mInterstitialAd.show();
                        Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
                        startActivity(intent);
                    }
                    else
                    {
                        Intent intent = new Intent(SplashScreenActivity.this, MainActivity.class);
                    }
                }
    
            }
        };
        timerThread.start();
    
    }
    
    // FIREBASE INTERSTICIAL
    private void requestNewInterstitial() {
        AdRequest adRequest = new AdRequest.Builder()
                .addTestDevice("SEE_YOUR_LOGCAT_TO_GET_YOUR_DEVICE_ID")
                .build();
    
        mInterstitialAd.loadAd(adRequest);
    }
    

    }

    DEBUG:

        01-22 16:27:03.048 13840-13970/? E/AndroidRuntime: FATAL EXCEPTION: Thread-6
    Process: idea.tisco.pepavideos, PID: 13840
    java.lang.IllegalStateException: isLoaded must be called on the main UI thread.
    at oc.b(:com.google.android.gms.DynamiteModulesA@11951448:20)
    at com.google.android.gms.ads.internal.a.d(:com.google.android.gms.DynamiteModulesA@11951448:98)
    at com.google.android.gms.ads.internal.client.ak.onTransact(:com.google.android.gms.DynamiteModulesA@11951448:14)
    at android.os.Binder.transact(Binder.java:499)
    at com.google.android.gms.internal.zzep$zza$zza.isReady(Unknown Source)
    at com.google.android.gms.internal.zzfa.isLoaded(Unknown Source)
    at com.google.android.gms.ads.InterstitialAd.isLoaded(Unknown Source)
    at company.ts.SplashScreenActivity$2.run(SplashScreenActivity.java:50)

    Even after the debugging, I couldn't understand the reason for the mistake.

    I would just display an interstitial right after the home screen or when I open the main activity.

    Thank you so much!



  • When you create a thread on Android, you No can modify the thread user interface directly. It is necessary to use the method https://developer.android.com/reference/android/app/Activity.html#runOnUiThread(java.lang.Runnable) .

    This way:

    runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            }
        }
    });
    

    And to carry InterstitialAd, just add the code below in your method onCreate

    mInterstitialAd = new InterstitialAd(this);
    mInterstitialAd.setAdUnitId("ca-app-pub-2565065222479596/3931476543");
    mInterstitialAd.loadAd(new AdRequest.Builder().build());
    



Suggested Topics

  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2
  • 2