web-dev-qa-db-fra.com

La taille et l'identifiant 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 lorsque 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 à ce qui est dans le titre.

44
zbz.lvlv

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"

supprimer la balise xmlns: ads *** et ajouter

xmlns:ads="http://schemas.Android.com/apk/res-auto"

balise à 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 ça :)

lien github pour ce xml

159
Hamed MP

Avertissement: Assurez-vous que vous définissez la taille de l'annonce et l'ID du bloc d'annonces de la même manière (c'est-à-dire que vous définissez les deux en XML ou les deux par programme).

https://developers.google.com/admob/Android/banner

19
Dan Alboteanu

De nombreuses personnes qui migrent des applications existantes vers la méthode des services Google Play ajoutent incorrectement des informations erronées.

Je voudrais souligner que de nombreuses personnes ayant la même question l'utilisent comme 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 doivent être remplacées par: - xmlns:ads="http://schemas.Android.com/apk/res-auto"

Ainsi

<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
Premier Invites

Cela va être vague car vous n'avez pas précisé le type de vue de votre fichier XML (relatif, linéaire, etc.)

Dans mon application avec une disposition relative déroulante, 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 souhaitez 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, rendez-vous sur ici

4
furkick

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>

N'oubliez pas ces étapes:

  1. Vous pouvez définir xmlns:ads="http://schemas.Android.com/apk/res-auto" À la racine voir 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 à l'intérieur de votre fichier xml AdView, ne définissez pas dynamiquement, comme: adView.setAdSize(AdSize.BANNER); sinon 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" Se ressemblent mais il y a une différence qui est xmlns: ads et xmlns: app alors ne vous y trompez pas .

Je pense que cela résoudra votre problème ... Heureux de vous aider :)

1
Abdul Rizwan

J'ai essayé de changer la déclaration d'espace de noms mais cela ne fonctionne tout simplement pas. J'ai résolu ce problème en spécifiant une valeur de hauteur pour 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
Kelok Chan

J'ai rencontré ce même problème car je n'ajoute pas cette ligne sur xmlns:ads="http://schemas.Android.com/apk/res-auto" sommet de . Ensuite, je change mon code xml comme ça

    <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"
    ads:layout_constraintLeft_toLeftOf="parent"
    ads:layout_constraintRight_toRightOf="parent"
    ads:layout_constraintTop_toTopOf="parent"
    ads:layout_constraintBottom_toTopOf="@+id/headerText"
    Android:layout_marginTop="@dimen/_2sdp"
    ads:adSize="BANNER"
    ads:adUnitId="ca-app-pub-3940256099942544/6300978111"
    Android:visibility="visible">
</com.google.Android.gms.ads.AdView>

après cela, j'ajoute cette 3 ligne dans la méthode onCreate

AdView mAdView = (AdView)findViewById(R.id.adView);
    MobileAds.initialize(this, "ca-app-pub-3940256099942544~3347511713");
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
0
DEVSHK