【问题标题】:onCreate() throws NULL Pointer exceptiononCreate() 抛出空指针异常
【发布时间】:2016-02-18 09:16:45
【问题描述】:

我一直在尝试移植我的应用程序以支持 pre Lollipop 设备,当我在 pre L 设备上运行应用程序时,操作栏似乎丢失了。这主要是因为getActionBar 返回 NULL,我认为从我在 SO 上阅读的帖子来看,我应该转到getSupportActionBar(),我这样做并更改了我的 Splash Activity 以使用这个主题:

    <style name="AppTheme" parent="Theme.AppCompat">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    </style>

但是当我的 Splash Activity 调用 onCreate(Bundle) 并调用 setContentView() 时,我现在得到以下异常:

02-18 14:38:42.750 27331-27331/com.airwatch.tunnel E/AndroidRuntime: FATAL EXCEPTION: main
                                                                 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.airwatch.tunnel/com.airwatch.tunnel.ui.activities.SplashActivity}: java.lang.NullPointerException
                                                                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211)
                                                                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
                                                                     at android.app.ActivityThread.access$600(ActivityThread.java:141)
                                                                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
                                                                     at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                     at android.os.Looper.loop(Looper.java:137)
                                                                     at android.app.ActivityThread.main(ActivityThread.java:5103)
                                                                     at java.lang.reflect.Method.invokeNative(Native Method)
                                                                     at java.lang.reflect.Method.invoke(Method.java:525)
                                                                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                                     at dalvik.system.NativeStart.main(Native Method)
                                                                  Caused by: java.lang.NullPointerException
                                                                     at android.support.v7.app.AppCompatDelegateImplV7.applyFixedSizeWindow(AppCompatDelegateImplV7.java:487)
                                                                     at android.support.v7.app.AppCompatDelegateImplV7.ensureSubDecor(AppCompatDelegateImplV7.java:287)
                                                                     at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:253)
                                                                     at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109)

最初,我遇到了You need to use a Theme.AppCompat theme (or descendant) with this activity 中列出的错误,但是在我如上所述更改了theme 之后,我遇到了上述崩溃。有人可以提供一些有关如何解决此问题的指示吗?我找不到任何特定于我现在面临的问题的东西。谢谢。

更新:

以下是 onCreate() 中的 Java 代码设置:

@Override
protected void onCreate(Bundle arg0) {
    setContentView(R.layout.activity_splash);
    initViews();
    mProfileReadyReceiver.registerReceiver();
    super.onCreate(arg0);
}

【问题讨论】:

  • 添加了 onCreate() Java 代码。
  • 有人可以提一下为什么投反对票吗?在发布问题之前我是否没有提供足够的详细信息或没有进行足够的研究?

标签: android android-theme setcontentview appcompatactivity


【解决方案1】:

替换

@Override
protected void onCreate(Bundle arg0) {
    setContentView(R.layout.activity_splash);
    initViews();
    mProfileReadyReceiver.registerReceiver();
    super.onCreate(arg0);
}

@Override
protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    setContentView(R.layout.activity_splash);
    initViews();
    mProfileReadyReceiver.registerReceiver();

}

【讨论】:

    【解决方案2】:

    super 应该是这个方法的第一个调用。

    你的方法应该是这样的

    @Override
    protected void onCreate(Bundle arg0) {
        super.onCreate(arg0);
        setContentView(R.layout.activity_splash);
        initViews();
        mProfileReadyReceiver.registerReceiver();
    }
    

    【讨论】:

    • 当解决方案是一个时,你怎么知道我复制和粘贴了?为什么不能是post中的代码副本和顺序改变?
    猜你喜欢
    • 1970-01-01
    • 2014-07-28
    • 2020-11-22
    • 2020-08-10
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多