java - 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 中提供的,也许是这样?但我不想专门在每个页面中提供它
解决方案
可能,横幅在尝试显示时会破坏。setTimeout
您可以尝试通过(几秒钟来检查这个想法)添加延迟以进行this.showAd();
呼叫:
ionViewWillEnter(): void {
setTimeout(() => { this.showAd(); }, 3000);
}
推荐阅读
- c# - 在 C# 中从 MemoryStream 更改为 Stream
- javascript - 使用 SVG 图标路径绘图
- gmail-api - 选项对象 - Gmail API - 它在哪里记录?
- sqlite - 如何使用 Diesel 和 SQLite 获取新创建值的 id?
- reactjs - header.component.tsx(14, 15):未提供“e”的参数
- javascript - How to close toggle when next list is toggled
- gstreamer - 将颜色映射流式传输到 RTSP 和 kvssink
- javascript - 如何在 facebook 像素 javascript 代码中使用 Wordpress 自定义插件选项的值
- google-apps-script - Google Scripts:当复选框为真时,将工作表 A 中的行复制到工作表 B。当复选框为假时,从工作表 B 中删除复制的行
- php - PHP MD5 哈希算法给出错误的哈希