java - ionic 电容器 Admob 插件 loadAd null 对象引用

标签 java android typescript ionic-framework

我正在开发一个 ionic 电容器应用程序,我正在使用 capacitor community ad plugin ,但我在 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中提供的,也许是这样?但我不想在每个页面中专门提供它

最佳答案

横幅可能在尝试显示时被破坏。您可以尝试通过 setTimeout 添加延迟(几秒钟来检查这个想法)为 this.showAd(); 调用:

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

关于java - ionic 电容器 Admob 插件 loadAd null 对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68291764/

相关文章:

javascript - 如何设置 React 类(ES6)的显示名称?

javascript - typescript 中的动态键和值类型检查

javascript - 由选择器触发的 Redux Action

java - 输入键 JTextField

java - 如何在 HashSet 中的特定索引/位置添加元素?

java - SAX 解析器 - OutOfMemoryError : Java heap space

java - 如何在 Android 应用程序中阻止或改善横向 View

android - 从 fragment 对话框中获取数据 - 最佳实践?

java - Java 和 Python 之间不可变字符串连接的性能比较

android - 在浏览器中打开移动应用程序菜单链接