webentwicklung-frage-antwort-db.com.de

Anzeigengröße und Anzeigenblock-ID müssen festgelegt werden, bevor loadAd aufgerufen wird

Ich habe dies in meiner Haupt-XML-Datei:

<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"/>

Ich habe bereits die Anzeigengröße und die Einheiten-ID festgelegt, aber wenn dies ausgeführt wird (von MainActivity.Java),

AdView adView = (AdView)this.findViewById(com.example.lovetestactual.R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
adView.loadAd(adRequest);

Es warf eine Ausnahme von dem, was im Titel steht.

44
zbz.lvlv

Ich habe im github-Beispiel eine Lösung gefunden, nämlich:

anstatt von

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

löschen Sie das xmlns: ads *** -Tag und fügen Sie es hinzu

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

tag zu Ihrem LinearLayout-Tag wie folgt:

<?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>

Das ist es :)

Github-Link für diese XML

159
Hamed MP

Warnung: Stellen Sie sicher, dass Sie die Anzeigengröße und die Anzeigenblock-ID auf dieselbe Weise festlegen (d. H. Beide in XML oder beide programmgesteuert festlegen).

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

19
Dan Alboteanu

Viele Leute, die vorhandene Anwendungen auf die Google Play Services-Methode migrieren, fügen fälschlicherweise die falschen Informationen hinzu.

Ich möchte darauf hinweisen, dass viele Personen mit der gleichen Frage dies als Vorlage verwendet haben

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

Dies ist falsch, da xmlns: ads geändert werden sollte in: - xmlns:ads="http://schemas.Android.com/apk/res-auto"

Wie so

<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

Dies wird vage sein, da Sie nicht angegeben haben, welche Art von Ansicht Ihre XML-Datei hat (Relativ, Linear usw.).

In meiner Anwendung mit einem scrollbaren relativen Layout habe ich Folgendes aufgenommen:

<RelativeLayout
    Android:id="@+id/test"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:layout_below="@+id/TextView07"
    Android:paddingTop="20dp" >
</RelativeLayout>

Jetzt in meiner aktuellen Klasse, in der ich nicht die Anzeige sehen möchte, die ich aufgenommen habe:

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);
}

Idealerweise möchten Sie jetzt ein intelligentes Banner verwenden, um Ihr Layout für alle Geräte zu optimieren, wie oben beschrieben. Dies ist jetzt Standard.

Wenn dies keine Hilfe ist, gehen Sie zu hier

4
furkick

entferne xmlns:ads="http://schemas.Android.com/tools" aus der Root-Ansicht

fügen Sie dann AdView hinzu

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

Merke dir diese Schritte:

  1. Sie können xmlns:ads="http://schemas.Android.com/apk/res-auto" In der Root-Ansicht selbst definieren.

  2. wenn Sie in rootView nicht xmlns:ads="http://schemas.Android.com/apk/res-auto" definiert haben, müssen Sie in AdView.xmlns:ads="http://schemas.Android.com/apk/res-auto" hinzufügen

  3. wenn Sie adSize in Ihrer AdView xml-Datei definiert haben, legen Sie es nicht dynamisch fest, wie z. B .: adView.setAdSize(AdSize.BANNER);, sonst wird es durch eine Ausnahme Java.lang.IllegalStateException: The ad size can only be set once on AdView.

  4. xmlns:ads="http://schemas.Android.com/apk/res-auto" Und xmlns:app="http://schemas.Android.com/apk/res-auto" Sehen gleich aus, aber es gibt einen Unterschied: xmlns: ads und xmlns: app .

Ich denke, es wird Ihr Problem lösen ... Gerne helfen :)

1
Abdul Rizwan

Ich habe versucht, die Namespace-Deklaration zu ändern, aber es funktioniert einfach nicht. Ich habe dies behoben, indem ich anstelle von wrap_content Einen Höhenwert für das AdView angegeben habe. Für mich geht das

<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

Ich hatte das gleiche Problem, weil ich diese Zeile nicht oben auf xmlns:ads="http://schemas.Android.com/apk/res-auto" Hinzufüge. Dann ändere ich meinen XML-Code so

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

danach füge ich diese 3 Zeilen in die onCreate-Methode ein

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