How to specify adUnitId programmatically for AdMob?
admob, adview, android
Solution
The method `loadAd()` checks if `(mAdView.getAdSize() == null || mAdView.getAdUnitId() == null)` when loadAd happens.
Try logging the boolean output of `(mAdView.getAdSize() == null || mAdView.getAdUnitId() == null)` before calling loadAd to determine its state:
mAdView = new AdView(this);
mAdView.setAdSize(AdSize.BANNER);
mAdView.setAdUnitId(AD_UNIT_ID);
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
.build();
if(mAdView.getAdSize() != null || mAdView.getAdUnitId() != null)
mAdView.loadAd(adRequest);
// else Log state of adsize/adunit
((LinearLayout)findViewById(R.id.adView)).addView(mAdview);
Problem
I'm trying to set adUnitId programmatically to ads from the new Google Play services (old AdMob). I have this in XML (used in an `<include>`): ``` <com.google.android.gms.ads.AdView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/adView" android:layout_width="match_parent" android:layout_height="wrap_content" ads:adSize="BANNER"/> ``` and this in onCreate(): ``` AdView mAdview = (AdView)findViewById(R.id.adView); mAdview.setAdUnitId(((App)getApplication()).getAdmobKey()); mAdview.setAdListener(new AdListener() { @Override public void onAdLoaded() { super.onAdLoaded(); findViewById(R.id.adView).setVisibility(View.VISIBLE); } }); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(AdRequest.DEVICE_ID_EMULATOR) .build(); mAdview.loadAd(adRequest); ``` And I get: The ad size and ad unit ID must be set before loadAd is called. So the second option was to make the ad programmatically. The new XML: ``` <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@+id/adView" /> ``` The new code: ``` AdView mAdview = new AdView(this); ... ((LinearLayout)findViewById(R.id.adView)).addView(mAdview); mAdview.loadAd(adRequest); ``` But I get the same error. I tried also to inherit from com.google.android.gms.ads.AdView to make a custom view, but it's final. Any suggestion?