web-dev-qa-db-ja.com

loadAdを呼び出す前に、広告サイズと広告ユニットIDを設定する必要があります

私のメインのxmlファイルにこれがあります:

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

広告サイズとユニットIDは既に設定していますが、これを実行すると(MainActivity.Javaから)、

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

タイトルにあるものの例外を投げました。

44
zbz.lvlv

私はgithubの例で解決策を見つけました、つまり:

の代わりに

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

xmlns:ads ***タグを削除して追加します

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

次のように、LinearLayoutタグにタグを付けます。

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

それでおしまい :)

このxmlのgithubリンク

159
Hamed MP

警告:広告サイズと広告ユニットIDを同じ方法で設定してください(つまり、両方をXMLで、または両方をプログラムで設定してください)。

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

19
Dan Alboteanu

多くの人が既存のアプリケーションをグーグルプレイサービスに移行すると、間違った情報が誤って追加されます。

私が指摘したいのは、同じ質問を持つ多くの人々がこれをテンプレートとして使用しているということです

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

Xmlns:adsを次のように変更する必要があるため、これは正しくありません:-xmlns:ads="http://schemas.Android.com/apk/res-auto"

そのようです

<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

XMLファイルがどのようなタイプのビュー(相対、線形など)であるかを述べていないため、これはあいまいになります。

スクロール可能な相対レイアウトを使用したアプリケーションには、次のものが含まれています。

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

今、私の実際のクラスの中に、私が含めた広告がありません。

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

上記のように、理想的にはスマートバナーを使用してすべてのデバイスのレイアウトを最適化したいと思います。これは標準です。

これが役に立たない場合は、 here

4
furkick

ルートビューから_xmlns:ads="http://schemas.Android.com/tools"_を削除

次に追加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>
_

次の手順を覚えておいてください。

  1. ルートビューselfで_xmlns:ads="http://schemas.Android.com/apk/res-auto"_を定義できます。

  2. rootView内で_xmlns:ads="http://schemas.Android.com/apk/res-auto"_を定義していない場合は、AdView。内で_xmlns:ads="http://schemas.Android.com/apk/res-auto"_を追加する必要があります。

  3. AdView xmlファイル内でadSizeを定義している場合、次のように動的に設定しないでください:adView.setAdSize(AdSize.BANNER);またはそうでない場合は、例外_Java.lang.IllegalStateException: The ad size can only be set once on AdView._

  4. _xmlns:ads="http://schemas.Android.com/apk/res-auto"_と_xmlns:app="http://schemas.Android.com/apk/res-auto"_は同じように見えますが、xmlns:adsxmlns:appの違いがあるため、混同しないでください。

私はそれがあなたの問題を解決すると思います...助けて幸せ:)

1
Abdul Rizwan

名前空間宣言を変更しようとしましたが、機能しません。 wrap_contentの代わりにadViewの高さの値を指定することでこれを修正しました。わたしにはできる

<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

xmlns:ads="http://schemas.Android.com/apk/res-auto" top ofにこの行を追加しないため、同じ問題に直面しました。次に、このようにxmlコードを変更します

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

その後、onCreateメソッドにこの3行を追加します

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