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.

36
demandé sur zbz.lvlv 2014-04-28 13:50:03

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 :)

Github lien pour ce xml

148
répondu Hamed MP 2014-06-01 14:34:08

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).

Https://developers.google.com/admob/android/banner

14
répondu Dan Alboteanu 2018-01-05 15:28:15

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>
4
répondu Premier Invites 2015-01-03 21:04:52

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

4
répondu furkick 2017-12-09 16:33:00

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" />
0
répondu Kelok Chan 2016-04-12 00:45:03

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:

  1. Vous pouvez définir xmlns:ads="http://schemas.android.com/apk/res-auto" sur la vue racine lui-même .

  2. Si vous n'avez pas défini xmlns:ads="http://schemas.android.com/apk/res-auto" dans rootView, vous devez ajouter xmlns:ads="http://schemas.android.com/apk/res-auto"dans AdView.

  3. 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 exception java.lang.IllegalStateException: The ad size can only be set once on AdView.

  4. xmlns:ads="http://schemas.android.com/apk/res-auto" et xmlns: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:)

0
répondu Abdul Rizwan 2018-02-22 14:45:07