La taille de l'annonce et l'ID de l'unité d'annonces doivent être définis avant que LoadAd ne soit appelé

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

  • Comment forcer la classe dérivée à appeler la méthode super? (Comme Android, fait)
  • Comment créer un menu d'options dynamique?
  • Modifié l'ordre dans main.xml, maintenant je reçois ClassCastException
  • Comment configurer l'élément actif dans la navigation déroulante de la barre d'action?
  • L'arrière-plan de la fenêtre est coupé par la barre d'état
  • Comment configurer les valeurs d'exposition et de balance des blancs pour une caméra personnalisée
  •  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.

    5 Solutions collect form web for “La taille de l'annonce et l'ID de l'unité d'annonces doivent être définis avant que LoadAd ne soit appelé”

    J'ai trouvé une solution dans l'exemple de github, c'est-à-dire:

    au lieu de

     xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 

    Supprimez le tag xmlns: annonces *** et ajoutez

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

    Tapez sur 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 🙂

    Lien github pour ce xml

    Cela va être vague car vous n'avez pas déclaré quel type de vue votre fichier XML est (Relatif, Linéaire, etc.)

    Dans ma demande avec une disposition relative défilable, 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 souhaite pas l'annonce que j'ai inclus:

     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 périphériques, comme je l'ai dit ci-dessus, c'est standard maintenant.

    Si cela ne sert à rien, passez ici

    Assurez-vous de définir la taille de l'annonce et l'ID de l'unité d'annonces de la même manière (c.-à-d. Définir à la fois en XML ou à la fois par programme).

    Beaucoup de gens La migration des applications existantes vers la méthode des services Google Play n'ajoute pas correctement les informations erronées.

    Quelque chose que je voudrais souligner, c'est que de nombreuses personnes ayant la même question utilisent cela 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 en tant que xmlns: les annonces doivent être modifiées pour: – 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> 

    J'ai essayé de modifier la déclaration de l'espace de noms, mais cela ne fonctionne pas. Je l'ai corrigé 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" /> 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.