La taille de l'annonce et L'id du bloc D'annonces doivent être définis avant l'appel de loadAd
, j'ai ceci dans mon fichier xml principal:
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
ads:adUnitId="******************"
ads:adSize="BANNER"
android:id="@+id/adView"/>
J'ai déjà défini la taille de l'annonce et l'ID de l'unité, mais quand cela est exécuté (à partir de MainActivity.java),
AdView adView = (AdView)this.findViewById(com.example.lovetestactual.R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);
Il a jeté une exception de ce qui est dans le titre.
6 réponses
J'ai trouvé une solution dans l'exemple github, c'est-à-dire:
Au Lieu de
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
Supprimez la balise xmlns:ads* * * et ajoutez
xmlns:ads="http://schemas.android.com/apk/res-auto"
Tag à votre balise LinearLayout comme suit:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello"/>
<com.google.android.gms.ads.AdView android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
ads:adSize="BANNER"
ads:adUnitId="INSERT_YOUR_AD_UNIT_ID_HERE"/>
</LinearLayout>
C'est tout :)
Attention: Assurez-vous de définir la taille de l'annonce et l'ID du bloc d'annonces de la même manière (c'est-à-dire définir les deux en XML ou les deux par programmation).
Beaucoup de gens qui migrent des applications existantes vers la méthode google play services ajoutent incorrectement les mauvaises informations.
Quelque chose que je voudrais souligner est que beaucoup de gens avec la même question ont utilisé ceci comme un modèle
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/lib-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="50dp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"
ads:loadAdOnCreate="true" >
</com.google.android.gms.ads.AdView>
Ceci est incorrect car xmlns: les annonces devraient être changées en:-
xmlns:ads="http://schemas.android.com/apk/res-auto"
Comme ça
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="50dp"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX"
ads:loadAdOnCreate="true" >
</com.google.android.gms.ads.AdView>
Cela va être vague car vous n'avez pas indiqué quel type de vue est votre fichier XML (relatif, linéaire, etc.)
Dans mon application avec une mise en page relative défilante, j'ai inclus:
<RelativeLayout
android:id="@+id/test"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@+id/TextView07"
android:paddingTop="20dp" >
</RelativeLayout>
Maintenant, dans ma classe actuelle, je ne veux pas l'annonce que j'ai incluse:
private AdView adView;
/* Your ad unit id. Replace with your actual ad unit id. */
private static final String AD_UNIT_ID = "ca-app-pub-xxxxxx/yyyyyy";
/**
* Simply loads the xml about page layout to display the text.
*/
public void onCreate(Bundle start) {
super.onCreate(start);
setContentView(R.layout.about);
final TelephonyManager tm = (TelephonyManager) getBaseContext()
.getSystemService(Context.TELEPHONY_SERVICE);
//String deviceid = tm.getDeviceId();
adView = new AdView(this);
adView.setAdSize(AdSize.SMART_BANNER);
adView.setAdUnitId(AD_UNIT_ID);
// Add the AdView to the view hierarchy. The view will have no size
// until the ad is loaded.
RelativeLayout layout = (RelativeLayout) findViewById(R.id.test);
layout.addView(adView);
// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
.build();
//.addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
//.addTestDevice(deviceid).build();
// Start loading the ad in the background.
adView.loadAd(adRequest);
}
Maintenant, idéalement, vous voulez utiliser une bannière intelligente pour optimiser votre mise en page pour tous les appareils, comme je l'ai ci-dessus, c'est standard maintenant.
Si ce n'est pas de l'aide, dirigez-vous vers ici
J'ai essayé de changer la déclaration d'espace de noms mais cela ne fonctionne tout simplement pas. J'ai corrigé cela en spécifiant une valeur de hauteur pour l'adView au lieu de wrap_content
. Ça marche pour moi
<com.google.android.gms.ads.AdView
android:id="@+id/adView2"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center|bottom"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id" />
Supprimer xmlns:ads="http://schemas.android.com/tools"
de la vue racine
, Puis ajoutez AdView
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
Rappelez-vous ces étapes:
Vous pouvez définir
xmlns:ads="http://schemas.android.com/apk/res-auto"
sur la vue racine lui-même .Si vous n'avez pas défini
xmlns:ads="http://schemas.android.com/apk/res-auto"
dans rootView, vous devez ajouterxmlns:ads="http://schemas.android.com/apk/res-auto"
dans AdView.Si vous avez défini adSize dans votre fichier xml
AdView
, Ne définissez pas dynamiquement, comme :adView.setAdSize(AdSize.BANNER);
ou bien il le fera via une exceptionjava.lang.IllegalStateException: The ad size can only be set once on AdView.
xmlns:ads="http://schemas.android.com/apk/res-auto"
etxmlns:app="http://schemas.android.com/apk/res-auto"
êtes à la recherche même mais il y a une différence qui est xmlns:annonces de et xmlns:app, donc ne pas se tromper.
Je pense que cela résoudra votre problème ... Heureux de vous aider:)