【问题标题】:Admob Google Play services. null pointer exception when showing interstitial adsAdmob 谷歌播放服务。显示插页式广告时出现空指针异常
【发布时间】:2013-12-09 13:16:00
【问题描述】:

我正在尝试将 admob 集成到我的游戏中,但是当我尝试展示插页式广告时,我收到了 nullpointerexcpetion。这是我的代码.. onCreate

内部
interstitial = new InterstitialAd(this);
interstitial.setAdUnitId("a1528e2f9897fc5");

AdRequest adRequest = new AdRequest.Builder().build();

interstitial.loadAd(adRequest);

我在这条线上遇到了错误。interstitial.loadAd(adRequest);

这是我的日志

12-11 17:12:41.755: E/AndroidRuntime(9357): FATAL EXCEPTION: main
12-11 17:12:41.755: E/AndroidRuntime(9357): java.lang.RuntimeException: Unable to start activity ComponentInfo{cr.logics.fastfood/cr.logics.fastfood.FastFood}: java.lang.NullPointerException
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.ActivityThread.access$600(ActivityThread.java:140)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.os.Handler.dispatchMessage(Handler.java:99)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.os.Looper.loop(Looper.java:137)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.ActivityThread.main(ActivityThread.java:4898)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at java.lang.reflect.Method.invokeNative(Native Method)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at java.lang.reflect.Method.invoke(Method.java:511)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at dalvik.system.NativeStart.main(Native Method)
12-11 17:12:41.755: E/AndroidRuntime(9357): Caused by: java.lang.NullPointerException
12-11 17:12:41.755: E/AndroidRuntime(9357):     at tj.a(SourceFile:191)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at tt.onTransact(SourceFile:81)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.os.Binder.transact(Binder.java:326)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at com.google.android.gms.internal.ac$a$a.a(Unknown Source)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at com.google.android.gms.ads.InterstitialAd.loadAd(Unknown Source)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at cr.logics.fastfood.FastFood.onCreate(FastFood.java:245)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.Activity.performCreate(Activity.java:5206)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
12-11 17:12:41.755: E/AndroidRuntime(9357):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
12-11 17:12:41.755: E/AndroidRuntime(9357):     ... 11 more

我已将 google-play-services-lib 添加到我的项目中,将元数据添加到清单中,并按照谷歌指南进行了所有操作,但我遇到了这个错误,(抱歉我的测试版英语)。 有什么建议? 提前致谢!

【问题讨论】:

  • 我也遇到了同样的问题,你有办法解决吗?
  • 我遇到了完全相同的错误。想知道您是否能够修复它?
  • 同样的 f****** 错误。插页式广告时无限崩溃
  • 同样的错误,未知原因。
  • 我也遇到了同样的问题,你有办法解决吗?

标签: java android eclipse admob google-play-services


【解决方案1】:

将以下内容添加到项目的 proguard-project.txt 以防止它剥离 admob 类

-keep public class com.google.android.gms.ads.** {
  public *;
}

-keep public class com.google.ads.** {
  public *;
}

并且还将以下活动包含到您的清单文件中

android:name="com.google.android.gms.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

【讨论】:

    【解决方案2】:

    在显示插页式广告之前,您必须检查插页式广告对象是否为空,并检查广告是否已加载。 完整代码如下:

    在 Activity 的 onCreate() 方法中:

    public class MainActivity extends Activity {
    
         public static InterstitialAd mInterstitialAd;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            MobileAds.initialize(this, new OnInitializationCompleteListener() {
                @Override
                public void onInitializationComplete(InitializationStatus initializationStatus) {}
            });
            mInterstitialAd = new InterstitialAd(this);
            mInterstitialAd.setAdUnitId("ca-app-pub-3940256099942544/1033173712");
            mInterstitialAd.loadAd(new AdRequest.Builder().build());
            mInterstitialAd.setAdListener(new AdListener() {
    
                 @Override
                 public void onAdLoaded() {
                      // Code to be executed when an ad finishes loading.
                 }
    
                 @Override
                 public void onAdFailedToLoad(int errorCode) {
                     // Code to be executed when an ad request fails.
                 }
    
                @Override
                public void onAdClosed() {
                    // Load the next interstitial Ad
                    mInterstitialAd.loadAd(new AdRequest.Builder().build());
                }
    
            });
        }
    }
    

    为了展示广告,我使用了静态方法。这样我就可以从另一个活动中调用此方法。

     public static void showInterstitialAd() {
    
            if (mInterstitialAd != null) {
                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
    
                    mInterstitialAd.loadAd(new AdRequest.Builder().build());
                }
            }
    
    
        }
    
    

    【讨论】:

      【解决方案3】:

      您必须在展示前检查广告是否已加载:

      if (interstitial!=null && interstitial.isLoaded()) 
      {
         interstitial.show();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多