You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:45:04