Android在调用OnCreate之前获取NullPointerException我的MainActivity

时间:2013-07-30 22:48:52

标签: android

我正在开发一款Android应用程序,在修改Fragment的代码时,每当我尝试启动应用程序时,我都会遇到严重的崩溃。奇怪的是,NullPointerException在它实际到达我的代码之前被抛出,因为当我进入调试模式时,在我到达MainCctivity的OnCreate()之前抛出Exception。特别令人费解的是,我没有在MainActivity或其布局中弄乱任何东西。

下面的堆栈跟踪。有什么想法吗?

07-30 15:39:52.753: E/AndroidRuntime(5348): FATAL EXCEPTION: main
07-30 15:39:52.753: E/AndroidRuntime(5348): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.legacy/com.example.legacy.MainActivity}: java.lang.NullPointerException
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.access$700(ActivityThread.java:143)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1241)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.os.Looper.loop(Looper.java:137)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.main(ActivityThread.java:4950)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at java.lang.reflect.Method.invokeNative(Native Method)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at java.lang.reflect.Method.invoke(Method.java:511)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1004)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:771)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at dalvik.system.NativeStart.main(Native Method)
07-30 15:39:52.753: E/AndroidRuntime(5348): Caused by: java.lang.NullPointerException
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:656)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.Fragment.performStart(Fragment.java:1481)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:941)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1070)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentManagerImpl.dispatchStart(FragmentManager.java:1866)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:568)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1178)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.Activity.performStart(Activity.java:5189)
07-30 15:39:52.753: E/AndroidRuntime(5348):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2083)

提前致谢。

3 个答案:

答案 0 :(得分:0)

如果这是Honeycomb之前,那么你必须使用支持库(我想你已经这样做了)。

如果您正在使用支持库片段,那么您必须使用FragmentActivity而不是用于启动片段的Activity。

如果您使用的是setRetainInstance(true),那么请您将其删除并重试。

(这是我建议实际帮助解决问题的链接):

Android FragmentManager BackStackRecord.run throwing NullPointerException

答案 1 :(得分:0)

这个问题完全相同,上面没有一个建议对我有帮助。 什么帮助我检查我的片段的导入:

  

导入android.os.Bundle;
  import android.util.Log;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.app.Fragment;

     

public class SelectionFragment extends Fragment {

可以看出,Fragment的导入是 android.app.Fragment 什么时候应该 android.support.v4.app.Fragment
所以更改代码如下解决了我的问题:

  

导入android.os.Bundle;
  import android.util.Log;
  import android.view.LayoutInflater;
  import android.view.View;
  import android.view.ViewGroup;
  import android.support.v4.app.Fragment;

     

public class SelectionFragment extends Fragment {

第一次导入可能是由Eclipse自动添加的。

答案 2 :(得分:-1)

您可能尝试在Android版本低于fragment activity的模拟器上运行HoneyComb 3.0。因此,要运行片段活动,您必须拥有运行Android 3.0或更高版本的手机或emualtor。您必须在项目中添加支持库android-support-v4.jar。一旦你合并了这个库,这个问题就会消失。