Facebook Ads Error : You can't call show() for ad in state LOADING
Facebook Ads Error : You can't call show() for ad in state LOADING
我正在按照他们的官方 documentation 在我的应用程序中集成 Facebook 广告。但是当我 运行 我的应用程序出现以下异常时
java.lang.IllegalStateException: You can't call show() for ad in state LOADING. You can change Integration Error mode by setting AdSettings.setIntegrationErrorMode()
at com.facebook.ads.internal.c.a.a(Unknown Source:122)
at com.facebook.ads.internal.c.f.a(Unknown Source:6)
at com.facebook.ads.InterstitialAd.show(Unknown Source:2)
at tech.grapegames.pdfreader.ui.MainActivity.moveToFragment(MainActivity.java:115)
at tech.grapegames.pdfreader.ui.HomeFragment.onClick(HomeFragment.java:85)
at android.view.View.performClick(View.java:6897)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
下面是我的代码
private com.facebook.ads.InterstitialAd fbInterstitialAd;
fbInterstitialAd = new com.facebook.ads.InterstitialAd(this, getString(R.string.fb_interstitial_ad_id));
fbInterstitialAd.loadAd();
我正在展示它如下
if (fbInterstitialAd.isAdLoaded() && !fbInterstitialAd.isAdInvalidated()) {
fbInterstitialAd.show();//This line causes the crash
这是我在 build.gradle
中添加的依赖项
implementation 'com.facebook.android:audience-network-sdk:5.+'
您使用了错误的依赖项。替换以下依赖项:
implementation 'com.facebook.android:audience-network-sdk:5.+'
和
implementation 'com.facebook.android:audience-network-sdk:5.0.1'
您好:您需要检查您的广告是否不为空,以及是否在显示之前加载:
if(fbInterstitialAd != null && fbInterstitialAd.isAdLoaded()) fbInterstitialAd.show();
fb_interstitialAd.setAdListener(new InterstitialAdListener() {
@Override
public void onInterstitialDisplayed(Ad ad) {
Toast.makeText(VideoStatusActivity.this, "Display",
Toast.LENGTH_SHORT).show();
}
@Override
public void onInterstitialDismissed(Ad ad) {
fb_interstitialAd.loadAd();
}
@Override
public void onError(Ad ad, AdError adError) {
}
@Override
public void onAdLoaded(Ad ad) {
}
@Override
public void onAdClicked(Ad ad) {
}
@Override
public void onLoggingImpression(Ad ad) {
}
});
我将 facebook 广告从 5.0.1 更新到 5.3.1,但出现同样的错误:
java.lang.IllegalStateException: You can't call load() for ad in state LOADING. Previous states: LOADING << CREATED. You can change Integration Error mode by setting AdSettings.setIntegrationErrorMode()
当您在加载前一个广告时尝试加载新广告时发生此错误。
他们写代码的时候抽什么烟?他们应该将错误重定向到 "onError" 方法,但他们决定抛出 IllegalStateException
我的解决方案并不优雅,但有效:
// load the ad
public void load() {
if (interstitialAd != null) {
try {
interstitialAd.loadAd();
} catch (Throwable e) {
// Do nothing, just skip and wait for ad loading
}
}
}
// show the ad
public void show() {
if (interstitialAd != null && interstitialAd.isAdLoaded()) {
try {
interstitialAd.show();
} catch (Throwable e) {
// Do nothing, just skip and wait for ad loading
}
}
}
我正在按照他们的官方 documentation 在我的应用程序中集成 Facebook 广告。但是当我 运行 我的应用程序出现以下异常时
java.lang.IllegalStateException: You can't call show() for ad in state LOADING. You can change Integration Error mode by setting AdSettings.setIntegrationErrorMode()
at com.facebook.ads.internal.c.a.a(Unknown Source:122)
at com.facebook.ads.internal.c.f.a(Unknown Source:6)
at com.facebook.ads.InterstitialAd.show(Unknown Source:2)
at tech.grapegames.pdfreader.ui.MainActivity.moveToFragment(MainActivity.java:115)
at tech.grapegames.pdfreader.ui.HomeFragment.onClick(HomeFragment.java:85)
at android.view.View.performClick(View.java:6897)
at android.view.View$PerformClick.run(View.java:26101)
at android.os.Handler.handleCallback(Handler.java:789)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6944)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
下面是我的代码
private com.facebook.ads.InterstitialAd fbInterstitialAd;
fbInterstitialAd = new com.facebook.ads.InterstitialAd(this, getString(R.string.fb_interstitial_ad_id));
fbInterstitialAd.loadAd();
我正在展示它如下
if (fbInterstitialAd.isAdLoaded() && !fbInterstitialAd.isAdInvalidated()) {
fbInterstitialAd.show();//This line causes the crash
这是我在 build.gradle
中添加的依赖项implementation 'com.facebook.android:audience-network-sdk:5.+'
您使用了错误的依赖项。替换以下依赖项:
implementation 'com.facebook.android:audience-network-sdk:5.+'
和
implementation 'com.facebook.android:audience-network-sdk:5.0.1'
您好:您需要检查您的广告是否不为空,以及是否在显示之前加载:
if(fbInterstitialAd != null && fbInterstitialAd.isAdLoaded()) fbInterstitialAd.show();
fb_interstitialAd.setAdListener(new InterstitialAdListener() {
@Override
public void onInterstitialDisplayed(Ad ad) {
Toast.makeText(VideoStatusActivity.this, "Display",
Toast.LENGTH_SHORT).show();
}
@Override
public void onInterstitialDismissed(Ad ad) {
fb_interstitialAd.loadAd();
}
@Override
public void onError(Ad ad, AdError adError) {
}
@Override
public void onAdLoaded(Ad ad) {
}
@Override
public void onAdClicked(Ad ad) {
}
@Override
public void onLoggingImpression(Ad ad) {
}
});
我将 facebook 广告从 5.0.1 更新到 5.3.1,但出现同样的错误:
java.lang.IllegalStateException: You can't call load() for ad in state LOADING. Previous states: LOADING << CREATED. You can change Integration Error mode by setting AdSettings.setIntegrationErrorMode()
当您在加载前一个广告时尝试加载新广告时发生此错误。 他们写代码的时候抽什么烟?他们应该将错误重定向到 "onError" 方法,但他们决定抛出 IllegalStateException
我的解决方案并不优雅,但有效:
// load the ad
public void load() {
if (interstitialAd != null) {
try {
interstitialAd.loadAd();
} catch (Throwable e) {
// Do nothing, just skip and wait for ad loading
}
}
}
// show the ad
public void show() {
if (interstitialAd != null && interstitialAd.isAdLoaded()) {
try {
interstitialAd.show();
} catch (Throwable e) {
// Do nothing, just skip and wait for ad loading
}
}
}