2014-09-22 16 views
7

Sto tentando di visualizzare un banner pubblicitario sulla mia app e sembra che abbia un problema. Ogni volta che passo all'attività, l'app si arresta in modo anomalo e menziona qualcosa al riguardo quando provo a caricare l'annuncio, che è un riferimento null. Non sono positivo perché comunque.Problemi con il caricamento degli annunci AdMob su App

Ecco l'XML per l'ADView:

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

Ecco il codice java per utilizzare gli annunci:

//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()); 

Ecco l'logcat:

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 

Ecco il codice da 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> 

Ora sto usando il metodo addTestDevice perché presumo che sia quello che devo usare dal momento che la mia app non è ancora sul mercato. Ho configurato il mio account AdMob e ho configurato il banner in questo modo.

Per favore fatemi sapere se avete qualche idea. Molte grazie.

+0

Si prega di inviare il file xml completo e l'output logcat. –

+0

@JuniorBuckeridge Ho aggiunto quello che hai chiesto. Mi dispiace per quello – sboehnke

+0

Sei sicuro di eseguire l'app su un dispositivo con Google Play Services disponibile? –

risposta

12

R.id.bannerAd non è disponibile nel contenuto impostato per la propria attività/frammento. prima di chiamare:

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

è necessario aver chiamato

setContentView(R.layout.MyLayoutContainingBannerAd); 
+0

Dopo averlo fatto, ora ho una finestra che dice" AdActivity mancante con android.configChanges in AndroidManifest.xml "Nel mio manifest ho il tag meta-dati impostato con com.google.android.gms.version e l'attività ha un nome com.google.android.gms.ads.AdActivity e configChanges alla tastiera | keyboardHidden | orientamento. Non ho idea di quale sia il problema. – sboehnke

+0

è necessario pubblicare il tuo AndroidManifest, ma sembra che tu non abbia specificato tutte le modifiche di configurazione richieste per AdActivity – William

+0

Ho aggiunto il codice dal mio androidmanifest – sboehnke

1

Si prega di verificare di aver incluso - compilazione 'com.google.android.gms: play-services-ads: 8.4.0' nel gradle.

1

Ho affrontato un problema simile. Quando ho controllato da vicino nel file di resourse C'erano due file di resourse per la mia attività:

\ res \ layout \ activity_main_lauch.xml

\ res \ layout-V21 \ activity_main_lauch.xml

ero modifing singolo file, quindi ha generato un errore. quando applico la modifica in entrambi i file ha iniziato a funzionare.

0

La soluzione accettata non ha risolto questo problema perché il setContentView() della mia attività è effettivamente prima del codice dell'annuncio.

L'annuncio in questione, tuttavia, era in un layout di frammento, che veniva inserito nel layout dell'attività. Sembra che stia accadendo una specie di condizione di gara, in quanto più tardi nel codice ho inserito il codice dell'annuncio più possibilità ho avuto per il successo, anche se il codice aveva poco a che fare con il display.

Ho deciso che il posto più soddisfacente per inserire il codice era nel frammento onViewCreated(), dove non mi ha ancora deluso.

Problemi correlati