Android RecyclerView中插入Banner广告加载失败(错误码1)求助
嘿,遇到错误码1(INVALID_REQUEST)的话,其实就是广告请求参数出了问题,虽然你确认了AppID正确,但咱们还有几个地方要逐一排查:
先确认AdUnitId是否正确
你代码里adView.setAdUnitId(con...看起来没写完,首先得确保这个ID是对应Banner广告的、在AdMob后台正确创建的。如果是测试阶段,建议先用谷歌官方提供的测试AdUnitId:ca-app-pub-3940256099942544/6300978111,替换后试试能不能加载,先排除ID本身的问题。检查AdSize的适配性
你用了AdSize.BANNER(320x50),要确保RecyclerView列表项的宽度能容纳这个尺寸,不然可能导致请求无效。可以试试换成AdSize.SMART_BANNER,它会根据屏幕尺寸自动调整大小,兼容性更好。核对View Type的逻辑是否正确
要确保getItemViewType方法能正确返回AD_TYPE,在你期望的位置插入广告项。比如如果是每隔N个普通项插一个广告,计算位置时要把已插入的广告项数量算进去,避免ViewType判断错误,导致广告View的创建逻辑走歪。确认AdView的上下文有效
创建AdView时,尽量用parent.getContext()而不是可能已经销毁的Activity上下文,避免上下文失效导致请求失败。添加AdListener获取详细错误信息
光看错误码不够,给AdView加个监听,打印更具体的错误原因:adView.setAdListener(new AdListener() { @Override public void onAdFailedToLoad(LoadAdError adError) { super.onAdFailedToLoad(adError); Log.e("AdLoadError", "错误码: " + adError.getCode() + ", 详情: " + adError.getMessage()); } });检查Manifest配置是否完整
确保AndroidManifest.xml里的权限和元数据没写错:<!-- 必要的网络权限 --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- AdMob AppID 元数据,注意name字段不能错 --> <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="你的AppID"/>
给你一个修正后的代码片段参考:
@Override public RecyclerViewAdapterMore.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == AD_TYPE) { // 使用parent的上下文更安全 AdView adView = new AdView(parent.getContext()); // 先测试用官方测试ID adView.setAdUnitId("ca-app-pub-3940256099942544/6300978111"); adView.setAdSize(AdSize.SMART_BANNER); // 添加监听查看详细错误 adView.setAdListener(new AdListener() { @Override public void onAdFailedToLoad(LoadAdError adError) { super.onAdFailedToLoad(adError); Log.e("AdLoad", "广告加载失败: " + adError.getCode() + ", 原因: " + adError.getMessage()); } }); // 加载广告请求 AdRequest adRequest = new AdRequest.Builder().build(); adView.loadAd(adRequest); // 返回广告对应的ViewHolder return new AdViewHolder(adView); } else { // 创建普通列表项的ViewHolder View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.your_normal_item_layout, parent, false); return new NormalItemViewHolder(itemView); } } // 自定义广告ViewHolder static class AdViewHolder extends RecyclerView.ViewHolder { public AdViewHolder(AdView adView) { super(adView); } }
内容的提问来源于stack exchange,提问作者Rana Pratap

