我正在尝试在我的应用上显示广告横幅,但我似乎遇到了问题。每当我进入活动时,应用程序崩溃并在我尝试加载广告时提及某些内容,它是一个空引用。虽然如此,我并不积极。
以下是广告视图的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());
这是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
这是来自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帐户设置,我有这样的横幅设置。
如果您有任何想法,请告诉我。非常感谢。
答案 0 :(得分:12)
R.id.bannerAd在您为活动/片段设置的内容中不可用。 致电之前:
AdView adView = (AdView)findViewById(R.id.bannerAd);
你必须要打电话
setContentView(R.layout.MyLayoutContainingBannerAd);
答案 1 :(得分:1)
请检查您是否已包含 - 在gradle中编译'com.google.android.gms:play-services-ads:8.4.0'。
答案 2 :(得分:1)
我遇到了类似的问题。当我在资源文件中仔细检查时,我的活动有两个资源文件:
\ RES \布局\ activity_main_lauch.xml
\ RES \布局-V21 \ activity_main_lauch.xml
我正在修改单个文件,因此它抛出了错误。 当我在两个文件中应用更改时,它开始工作。
答案 3 :(得分:0)
我接受的解决方案并未解决此问题,因为我的活动int(x.split()[-2][:-1])
确实在广告代码之前。
然而,有问题的广告在片段布局中 ,它被插入到活动的布局中。似乎某种竞争条件正在发生,因为在代码的后面我放置了广告代码,我获得成功的机会就越大,即使代码与显示器没什么关系。
我决定将代码放在片段for x in output[1:]:
perc = int(x.split()[-2][:-1])
if perc >= threshold:
# ...
中的最令人满意的地方,它还没有让我失望。