如何使用ExoPlayer IMA扩展获取伴生广告(Companion Ads)的宽高?
问题根因
崩溃并非来自你对getCompanionAds()返回值的空校验逻辑,而是Google IMA SDK的getCompanionAds()方法内部本身存在空指针隐患:当当前加载的广告未配置伴生广告资源时,方法内部遍历广告资源用到的List对象未做空处理,还未等你拿到返回值执行判断,方法内部就会抛出空指针异常,崩溃堆栈也明确指向SDK内部的getCompanionAds实现。
修复方案
对getCompanionAds()的调用主动加异常捕获,同时补充列表空校验避免后续索引越界,修改后的代码如下:
private class AdEventListener implements AdEvent.AdEventListener { @Override public void onAdEvent(AdEvent adEvent) { switch (adEvent.getType()) { case STARTED: companionViewGroup.setVisibility(View.VISIBLE); break; case ALL_ADS_COMPLETED: companionViewGroup.setVisibility(View.GONE); break; case LOADED: if (adEvent.getAd() != null) { List<CompanionAd> companionAds = null; // 捕获SDK内部抛出的空指针异常 try { companionAds = adEvent.getAd().getCompanionAds(); } catch (NullPointerException e) { // 无可用伴生广告,不做额外处理 } // 额外判断列表非空,避免get(0)触发索引越界 if (companionAds != null && !companionAds.isEmpty()) { Log.d("TAG00", "height " + companionAds.get(0).getHeight()); } } break; } } }
内容的提问来源于stack exchange,提问作者ltsadevs
相关产品推荐
相关产品推荐

