【问题标题】:Issues with Loading AdMob Ads on App在应用上加载 AdMob 广告的问题
【发布时间】:2014-09-22 02:46:29
【问题描述】:

我正在尝试在我的应用上显示广告横幅,但我似乎遇到了问题。每当我进入活动时,应用程序就会崩溃,并在我尝试加载广告时提到它是一个空引用。我不肯定为什么。

这是广告视图的 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 帐户设置,并且我有这样的横幅设置。

如果您有任何想法,请告诉我。非常感谢。

【问题讨论】:

  • 请发布完整的 xml 文件和 logcat 输出。
  • @JuniorBuckerridge 我添加了您要求的内容。对此感到抱歉。
  • 您确定要在提供 Google Play 服务的设备上运行该应用程序吗?
  • @JuniorBuckerridge 我想是的。我正在使用 HTC one m8。对不起,我对这一切都很陌生。我不知道它可能对某些人可用,而对其他人则不可用。
  • 不应“AdRequest.Builder request = new AdRequest.Builder();”是“AdRequest request = new AdRequest.Builder();”?

标签: java android xml admob adview


【解决方案1】:

R.id.bannerAd 在您为 Activity/Fragment 设置的内容中不可用。 致电前:

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

你一定打过电话

setContentView(R.layout.MyLayoutContainingBannerAd);

【讨论】:

  • 在这样做之后,现在我有一个框显示“AndroidManifest.xml 中的 android.configChanges 缺少 AdActivity” 在我的清单中,我使用 com.google.android 设置了元数据标签。 gms.version 和活动有一个名称 com.google.android.gms.ads.AdActivity 和 configChanges 到键盘|键盘隐藏|方向。不知道是什么问题。
  • 您需要发布您的 AndroidManifest,但听起来您尚未指定 AdActivity 所需的所有配置更改。
  • 在我的 configChanges 中添加了键盘|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize,现在可以使用了。
  • 那个方法应该是 setContentView() 而不是 setContent() 对吧?
【解决方案2】:

我遇到了类似的问题。当我仔细检查资源文件时,我的活动有两个资源文件:

\res\layout\activity_main_lauch.xml

\res\layout-v21\activity_main_lauch.xml

我正在修改单个文件,因此抛出错误。 当我在它开始工作的两个文件中应用更改时。

【讨论】:

    【解决方案3】:

    请检查您是否包含 - 在 gradle 中编译 'com.google.android.gms:play-services-ads:8.4.0'。

    【讨论】:

      【解决方案4】:

      接受的解决方案没有为我解决这个问题,因为我的 Activity 的 setContentView() 确实在广告代码之前。

      然而,有问题的广告是在片段布局中,它被插入到活动的布局中。似乎发生了某种竞争条件,因为我在代码中放置广告代码的时间越晚,成功的机会就越大,即使代码与显示无关。

      我决定将代码放在最满意的地方是片段的onViewCreated(),它还没有让我失望。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-17
        • 2013-06-22
        • 1970-01-01
        • 2019-11-28
        • 1970-01-01
        • 1970-01-01
        • 2020-07-11
        相关资源
        最近更新 更多