Проблемы с загрузкой рекламы AdMob в приложении

Я пытаюсь отобразить рекламный баннер в своем приложении, и, похоже, у меня возникла проблема. Каждый раз, когда я вхожу в действие, приложение вылетает и упоминает что-то об этом, когда я пытаюсь загрузить объявление, что это пустая ссылка. Я не уверен, почему, хотя.

Вот xml для просмотра рекламы:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:id="@+id/gameLayout">

    <com.google.android.gms.ads.AdView
        android:id="@+id/bannerAd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        ads:adSize="BANNER"
        ads:adUnitId="MY_ADUNITID" />

</FrameLayout>

Вот код Java для использования рекламы:

//load ads
AdView adView = (AdView)findViewById(R.id.bannerAd);
AdRequest.Builder request = new AdRequest.Builder();
request.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);
adView.loadAd(request.build());

Вот логарифм:

09-21 21:55:39.300: E/AndroidRuntime(1168): FATAL EXCEPTION: main
09-21 21:55:39.300: E/AndroidRuntime(1168): Process: com.project.llb, PID: 1168
09-21 21:55:39.300: E/AndroidRuntime(1168): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.twentytwentythree.sab/com.twentytwentythree.sab.runGraphics}: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.ads.AdView.loadAd(com.google.android.gms.ads.AdRequest)' on a null object reference
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2596)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2653)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.ActivityThread.access$800(ActivityThread.java:156)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1355)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.os.Handler.dispatchMessage(Handler.java:102)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.os.Looper.loop(Looper.java:157)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.ActivityThread.main(ActivityThread.java:5872)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at java.lang.reflect.Method.invoke(Native Method)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:852)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:668)
09-21 21:55:39.300: E/AndroidRuntime(1168): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.ads.AdView.loadAd(com.google.android.gms.ads.AdRequest)' on a null object reference
09-21 21:55:39.300: E/AndroidRuntime(1168):     at com.twentytwentythree.sab.runGraphics.onCreate(runGraphics.java:94)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.Activity.performCreate(Activity.java:5312)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1111)
09-21 21:55:39.300: E/AndroidRuntime(1168):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2552)
09-21 21:55:39.300: E/AndroidRuntime(1168):     ... 9 more

Вот код из androidmanifest:

<meta-data android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
    <activity
        android:name="com.google.android.gms.ads.AdActivity"
        android:configChanges="keyboard|keyboardHidden|orientation" >
    </activity>

Теперь я использую метод addTestDevice, потому что предполагаю, что это то, что мне нужно использовать, поскольку моего приложения еще нет на рынке. У меня есть настройка моей учетной записи admob, и у меня есть настройка баннера таким образом.

Пожалуйста, дайте мне знать, если у вас есть идеи. Большое спасибо.


person sboehnke    schedule 22.09.2014    source источник
comment
Пожалуйста, опубликуйте полный файл xml и вывод logcat.   -  person Junior Buckeridge    schedule 22.09.2014
comment
@JuniorBukeridge Я добавил то, что вы просили. Извини за это.   -  person sboehnke    schedule 22.09.2014
comment
Вы уверены, что запускаете приложение на устройстве с доступными сервисами Google Play?   -  person Junior Buckeridge    schedule 22.09.2014
comment
@JuniorBuckerridge Я так полагаю. Я использую HTC one m8. Извините, я новичок во всем этом. Я не знал, что это может быть доступно на некоторых, а не на других.   -  person sboehnke    schedule 22.09.2014
comment
Вы можете проверить документы здесь developer.android.com/google/play-services/ ads.html и образец проекта помогут вам в работе.   -  person Junior Buckeridge    schedule 22.09.2014
comment
Не следует запрашивать AdRequest.Builder = new AdRequest.Builder(); запрос AdRequest = новый AdRequest.Builder();?   -  person Nana Ghartey    schedule 22.09.2014
comment
@NanaGhartey Это просто выдает мне ошибку.   -  person sboehnke    schedule 22.09.2014
comment
Импортируйте классы из пакета com.google.android.gms.ads.*   -  person Nana Ghartey    schedule 23.09.2014


Ответы (4)


R.id.bannerAd недоступен в содержимом, которое вы установили для своего действия/фрагмента. Перед вызовом:

AdView adView = (AdView)findViewById(R.id.bannerAd);

вы, должно быть, позвонили

setContentView(R.layout.MyLayoutContainingBannerAd);
person William    schedule 22.09.2014
comment
После этого у меня появляется окно с сообщением «Отсутствует рекламная активность с android.configChanges в AndroidManifest.xml». В моем манифесте у меня установлен тег метаданных с com.google.android.gms.version, а действие имеет имя .google.android.gms.ads.AdActivity и configChanges на клавиатуру|клавиатура скрыта|ориентация. Не знаю, в чем проблема. - person sboehnke; 23.09.2014
comment
Вам нужно опубликовать свой AndroidManifest, но похоже, что вы не указали все изменения конфигурации, необходимые для AdActivity. - person William; 23.09.2014
comment
Добавлена ​​​​клавиатура | клавиатура Скрытая | ориентация | screenLayout | uiMode | screenSize | smallestScreenSize в мои configChanges, и теперь это работает. - person sboehnke; 23.09.2014
comment
Этот метод должен быть setContentView(), а не setContent(), верно? - person wasimsandhu; 26.04.2015

Я столкнулся с подобной проблемой. Когда я внимательно проверил файл ресурсов, для моей деятельности было два файла ресурсов:

\res\layout\activity_main_lauch.xml

\res\layout-v21\activity_main_lauch.xml

Я модифицировал один файл, поэтому выдавал ошибку. когда я применяю изменения в обоих файлах, они начинают работать.

person user2902302    schedule 17.06.2016

Убедитесь, что вы включили — скомпилируйте «com.google.android.gms:play-services-ads:8.4.0» в Gradle.

person Preetham Hegde    schedule 27.04.2016

Принятое решение не решило эту проблему для меня, поскольку setContentView() моего действия действительно находится перед рекламным кодом.

Однако рассматриваемое объявление было в макете фрагмента, который вставлялся в макет действия. Похоже, происходило какое-то состояние гонки: чем позже в коде я размещал рекламный код, тем больше у меня было шансов на успех, хотя код имел мало общего с отображением.

Я решил, что наиболее подходящим местом для размещения кода будет onViewCreated() фрагмента, где он еще не подводил меня.

person Ger    schedule 01.05.2017