首页 > 解决方案 > Ionic Capacitor Admob 插件 loadAd 空对象引用

问题描述

我正在开发 Ionic Capacitor 应用程序,并且正在使用电容器社区广告插件,但在 Android Studio 中出现以下错误:

 java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.ads.AdView.loadAd(com.google.android.gms.ads.AdRequest)' on a null object reference

我正在使用命令在 android 手机上运行应用程序ionic capacitor run android -l --external

这就是错误发生的方式:

欢迎页面(登录页面具有相同的生命周期方法和调用):

ionViewWillLeave(): void {
  this.removeAd();
}

ionViewWillEnter(): void {
  this.showAd();
}

private async showAd(): Promise<void> {
  await this.admobService.showBanner();
}

private async removeAd(): Promise<void> {
  await this.admobService.removeBanner();
}

Admob 服务:

public async showBanner(): Promise<void> {
  AdMob.addListener(BannerAdPluginEvents.FailedToLoad, (info) => {
    //console.log(info);
  });

  const options: BannerAdOptions = {
    adId: 'hidden',
    adSize: BannerAdSize.BANNER,
    position: BannerAdPosition.TOP_CENTER,
    margin: 0,
    isTesting: true,
  };
  AdMob.showBanner(options);
}

public async removeBanner(): Promise<void> {
  await AdMob.removeBanner();
}

Admob 服务是在 root 中提供的,也许是这样?但我不想专门在每个页面中提供它

标签: javaandroidtypescriptionic-framework

解决方案


可能,横幅在尝试显示时会破坏。setTimeout您可以尝试通过(几秒钟来检查这个想法)添加延迟以进行this.showAd();呼叫:

ionViewWillEnter(): void {
    setTimeout(() => { this.showAd(); }, 3000);
}

推荐阅读