InterstitalAd при вызове show приложение вылетает
В onCreate:
MobileAds.initialize(this);
AdRequest adRequest = new AdRequest.Builder().build();
InterstitialAd.load(this,"ca-app-pub-3940256099942544/1033173712", adRequest,
new InterstitialAdLoadCallback() {
@Override
public void onAdLoaded(@NonNull InterstitialAd interstitialAd) {
mInterstitialAd = interstitialAd;
mInterstitialAd.setFullScreenContentCallback(new FullScreenContentCallback() {
@Override
public void onAdDismissedFullScreenContent() {
mInterstitialAd = null;
}
@Override
public void onAdFailedToShowFullScreenContent(AdError adError) {
mInterstitialAd = null;
}
@Override
public void onAdShowedFullScreenContent() { }
});
}
@Override
public void onAdFailedToLoad(@NonNull LoadAdError loadAdError) { mInterstitialAd = null; }
});
if (mInterstitialAd != null) {
mInterstitialAd.show(this);
}
Ошибка(Logcat):
2021-06-29 20:14:19.507 31692-31800/com.neutrinozh.dino E/AndroidRuntime: FATAL EXCEPTION: GLThread 1150
Process: com.neutrinozh.dino, PID: 31692
java.lang.RuntimeException: java.lang.Throwable: A WebView method was called on thread 'GLThread 1150'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 2) {83a0252} called on null, FYI main Looper is Looper (main, tid 2) {83a0252})
at android.webkit.WebView.checkThread(WebView.java:2597)
at android.webkit.WebView.evaluateJavascript(WebView.java:882)
at com.google.android.gms.internal.ads.zzciu.evaluateJavascript(com.google.android.gms:play-services-ads@@20.2.0:3)
at com.google.android.gms.internal.ads.zzciu.zzaM(com.google.android.gms:play-services-ads@@20.2.0:1)
at com.google.android.gms.internal.ads.zzciu.zzaN(com.google.android.gms:play-services-ads@@20.2.0:4)
at com.google.android.gms.internal.ads.zzciu.zzd(com.google.android.gms:play-services-ads@@20.2.0:10)
at com.google.android.gms.internal.ads.zzbun.zzj(com.google.android.gms:play-services-ads@@20.2.0:2)
at com.google.android.gms.internal.ads.zzciu.zzag(com.google.android.gms:play-services-ads@@20.2.0:5)
at com.google.android.gms.internal.ads.zzciq.zzag(com.google.android.gms:play-services-ads@@20.2.0:1)
at com.google.android.gms.internal.ads.zzead.zza(com.google.android.gms:play-services-ads@@20.2.0:2)
at com.google.android.gms.internal.ads.zzddu.zza(com.google.android.gms:play-services-ads@@20.2.0:4)
at com.google.android.gms.internal.ads.zzefm.zzQ(com.google.android.gms:play-services-ads@@20.2.0:5)
at com.google.android.gms.internal.ads.zzbof.show(com.google.android.gms:play-services-ads-lite@@20.2.0:2)
at com.neutrinozh.dino.AndroidLauncher.show(AndroidLauncher.java:162)
at com.neutrinozh.dino.Dino.menuUpdate(Dino.java:247)
at com.neutrinozh.dino.Dino.render(Dino.java:313)
at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:471)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1573)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1272)
Caused by: java.lang.Throwable: A WebView method was called on thread 'GLThread 1150'. All WebView methods must be called on the same thread. (Expected Looper Looper (main, tid 2) {83a0252} called on null, FYI main Looper is Looper (main, tid 2) {83a0252})
at android.webkit.WebView.checkThread(WebView.java:2592)
at android.webkit.WebView.evaluateJavascript(WebView.java:882)
at com.google.android.gms.internal.ads.zzciu.evaluateJavascript(com.google.android.gms:play-services-ads@@20.2.0:3)
at com.google.android.gms.internal.ads.zzciu.zzaM(com.google.android.gms:play-services-ads@@20.2.0:1)
at com.google.android.gms.internal.ads.zzciu.zzaN(com.google.android.gms:play-services-ads@@20.2.0:4)
at com.google.android.gms.internal.ads.zzciu.zzd(com.google.android.gms:play-services-ads@@20.2.0:10)
at com.google.android.gms.internal.ads.zzbun.zzj(com.google.android.gms:play-services-ads@@20.2.0:2)
at com.google.android.gms.internal.ads.zzciu.zzag(com.google.android.gms:play-services-ads@@20.2.0:5)
at com.google.android.gms.internal.ads.zzciq.zzag(com.google.android.gms:play-services-ads@@20.2.0:1)
at com.google.android.gms.internal.ads.zzead.zza(com.google.android.gms:play-services-ads@@20.2.0:2)
at com.google.android.gms.internal.ads.zzddu.zza(com.google.android.gms:play-services-ads@@20.2.0:4)
at com.google.android.gms.internal.ads.zzefm.zzQ(com.google.android.gms:play-services-ads@@20.2.0:5)
at com.google.android.gms.internal.ads.zzbof.show(com.google.android.gms:play-services-ads-lite@@20.2.0:2)
at com.neutrinozh.dino.AndroidLauncher.show(AndroidLauncher.java:162)
at com.neutrinozh.dino.Dino.menuUpdate(Dino.java:247)
at com.neutrinozh.dino.Dino.render(Dino.java:313)
at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:471)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1573)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1272)
Ответы (2 шт):
Автор решения: Neutrino Zh
→ Ссылка
Проблема решена. Просто перешёл на более раннюю версию play-services-ads (на 10.2.4); Переписал код под неё, как это показано здесь и всё успешно заработало!
Автор решения: Binary
→ Ссылка
А можно сделать так, должно работать на последней версии
private var mInterstitialAd: InterstitialAd? = null
MobileAds.initialize(this)
InterstitialAd.load(context, interstitialKey, adRequest, object : InterstitialAdLoadCallback() {
override fun onAdFailedToLoad(adError: LoadAdError) {
mInterstitialAd = null
}
override fun onAdLoaded(interstitialAd: InterstitialAd) {
mInterstitialAd = interstitialAd
mInterstitialAd?.fullScreenContentCallback = object : FullScreenContentCallback() {
override fun onAdDismissedFullScreenContent() {
}
override fun onAdFailedToShowFullScreenContent(adError: AdError?) {
}
override fun onAdShowedFullScreenContent() {
mInterstitialAd = null
}
}
}
})
mInterstitialAd?.show(this)