2014-09-22 10 views
7

Ich versuche, eine Anzeigen-Banner-Anzeige in meiner App zu erstellen, und es scheint, dass ich ein Problem habe. Jedes Mal, wenn ich in die Aktivität gehe, stürzt die App ab und erwähnt etwas, wenn ich versuche, die Anzeige zu laden, dass es eine Nullreferenz ist. Ich bin jedoch nicht davon überzeugt, warum. HierProbleme beim Laden von AdMob-Anzeigen in der App

ist die xml für die 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> 

Hier ist die Java-Code für die Verwendung der Anzeigen:

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

Hier wird die 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 

Hier der code von der 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> 

Jetzt verwende ich die addTestDevice-Methode, weil ich annehme, dass das ist, was ich verwenden muss, da meine App noch nicht auf dem Markt ist. Ich habe mein admob Konto Setup und ich habe das Banner-Setup auf diese Weise.

Bitte lassen Sie mich wissen, wenn Sie irgendwelche Ideen haben. Danke vielmals.

+0

Bitte veröffentlichen Sie die vollständige XML-Datei und die Logcat-Ausgabe. –

+0

@JuniorBuckeridge Ich habe hinzugefügt, wonach Sie gefragt haben. Das tut mir leid. – sboehnke

+0

Sind Sie sicher, dass Sie die App auf einem Gerät mit Google Play Services verfügbar haben? –

Antwort

12

R.id.bannerAd ist in dem Inhalt, den Sie für Ihre Aktivität/Fragment festgelegt haben, nicht verfügbar. vor dem Aufruf:

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

Sie

setContentView(R.layout.MyLayoutContainingBannerAd); 
+0

Nachdem ich das jetzt getan habe, habe ich eine Box, die sagt" Fehlende AdActivity mit android.configChanges in AndroidManifest.xml "In meinem Manifest habe ich die Meta-Tag festgelegt mit com.google.android.gms.version und die Aktivität hat einen Namen com.google.android.gms.ads.AdActivity und configChanges zu Tastatur | keyboardHidden | Ausrichtung. Keine Ahnung, was das Problem ist. – sboehnke

+0

Sie Sie müssen Ihr AndroidManifest posten, aber es klingt, als hätten Sie nicht alle für die AdActivity erforderlichen Konfigurationsänderungen angegeben. – William

+0

Ich habe den Code von meinem Androidmanifest hinzugefügt. – sboehnke

1

Bitte überprüfen Sie enthalten sind, genannt haben müssen - Kompilierung 'com.google.android.gms: Play-Dienste-Anzeigen: 8.4.0' in der Großzahl.

1

Ich konfrontiert Ähnliche Ausgabe. Wenn ich eng in resourse Datei überprüft gab es zwei resourse Datei für meine Tätigkeit:

\ res \ layout \ activity_main_lauch.xml

\ res \ layout-v21 \ activity_main_lauch.xml

Ich war modifing Single Datei, daher war es Fehler werfen. wenn ich die Änderung in beiden Dateien anwendete, fing es an zu arbeiten.

0

Die akzeptierte Lösung hat dies für mich nicht gelöst, da die setContentView() meiner Aktivität tatsächlich vor dem Anzeigencode ist.

Die entsprechende Anzeige war jedoch in einem Fragmentlayout, das in das Layout der Aktivität eingefügt wurde. Es scheint, dass eine Art von Race Condition passierte, in dem, je später im Code ich den Anzeigencode platzierte, desto mehr Chancen hatte ich zum Erfolg, auch wenn der Code wenig mit dem Display zu tun hatte.

Ich entschied, dass der befriedigendste Ort, um den Code zu setzen, in der onViewCreated() des Fragments war, wo es mich noch nicht gescheitert hat.