【问题标题】:Starting another activity in onCreate of mainActivity generates error在 mainActivity 的 onCreate 中启动另一个活动会产生错误
【发布时间】:2015-02-03 09:13:43
【问题描述】:

我正在构建一个简单的应用程序,该应用程序(在每次启动时)都会获取偏好并检查用户是否同意条款。如果不是,它会开始另一个带有条款的活动。这是我开始活动的代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedPreferences preferences = getPreferences(MODE_PRIVATE);
        boolean termsConfirmed = preferences.getBoolean("termsConfirmed", false);
        if(!termsConfirmed) {
            Intent intent = new Intent(this, confirmTerms.class);
            startActivityForResult(intent, TERMS_CONFIRMATION);
        }
}

但是这会导致此方法中出现空指针异常:

 @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        refresh = menu.findItem(R.id.action_refresh);
        listener.refresh = refresh;
}

这是完整的 logcat 错误代码:

02-03 09:15:20.577: E/AndroidRuntime(1996): FATAL EXCEPTION: main
02-03 09:15:20.577: E/AndroidRuntime(1996): java.lang.NullPointerException
02-03 09:15:20.577: E/AndroidRuntime(1996):     at hzs.sk.hzs.MainActivity.onCreateOptionsMenu(MainActivity.java:141)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.app.Activity.onCreatePanelMenu(Activity.java:2158)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:275)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:1056)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1259)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:80)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:119)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.os.Handler.handleCallback(Handler.java:587)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.os.Looper.loop(Looper.java:130)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at android.app.ActivityThread.main(ActivityThread.java:3683)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at java.lang.reflect.Method.invokeNative(Native Method)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at java.lang.reflect.Method.invoke(Method.java:507)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
02-03 09:15:20.577: E/AndroidRuntime(1996):     at dalvik.system.NativeStart.main(Native Method)

如果我在没有结果的情况下开始活动,例如 startActivity() 并通过调用 finish() 来完成它,那么它可以工作,但我需要该活动的结果,所以我必须像我一样开始。有什么想法吗?

感谢转发

【问题讨论】:

  • 你能粘贴你的 LogCat 错误代码吗?
  • 完成了,我想如果我开始另一个活动,我的主要活动在开始的活动完成之前不会到达这一点,但它显然不是那样工作
  • 尝试在onCreateOptionsMenu 上添加super.onCreateOptionsMenu(menu,inflater); 或只是return true
  • 对不起,我没有复制整个代码,但我在 onCreateOptionsMenu 的末尾返回了 super.onCreateOptionsMenu(menu)

标签: android android-activity nullpointerexception


【解决方案1】:

我不知道是什么导致了异常。但是如果您需要第二个 Activity 的结果,您可以将结果保存为另一个类的静态字段(也是第一个 Activity 的静态字段)的值,并在完成第一个 Activity 并恢复第一个 Activity 后,使用该字段的值。

【讨论】:

  • 好主意,但我最好通过 startacitivtyforresult 来做
  • @horin 好的!让我知道结果。
  • 在尝试了一些代码组合后,我了解到使用 startactivityforresult 对我来说是唯一可能的选择。如果我在有问题的代码之后调用它,它可以工作,但它显示我的第一个活动,然后切换到第二个,我想避免这种行为
  • @horin 为什么不使用 Activity 来显示 splash screen 并决定必须显示哪个 Activity?
  • 我已经按照您的建议使用启动闪屏解决了这个问题,它正在按我的意愿工作......谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-25
相关资源
最近更新 更多