Android中java.lang.RuntimeException: 无法实例化activity ComponentInfo ... java.lang.NullPointerException。

4
由于某些原因,每次我尝试启动我的应用程序时都会收到以下错误:
Unable to instantiate activity ComponentInfo{com.example.lifeahead/com.example.lifeahead.MainActivity}:java.lang.NullPointerException

我检查了我的清单文件,每个活动都已添加。
我在启动应用程序时仅使用一种方法:
private void logIn(){
    Button logIn = (Button) findViewById(R.id.login);
    logIn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent loginIntent = new Intent(MainActivity.this, HomeActivity.class);
            loginIntent.putExtra("cmUN", cmUN);
            loginIntent.putExtra("cmPW", cmPW);
            startActivity(loginIntent);
        }
    });
}

这是onCreate函数:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment()).commit();
    }

    logIn();
}

完整日志:

E

/AndroidRuntime(1607): FATAL EXCEPTION: main
E/AndroidRuntime(1607): Process: com.example.lifeahead, PID: 1607
E/AndroidRuntime(1607): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.lifeahead/com.example.lifeahead.MainActivity}: java.lang.NullPointerException
E/AndroidRuntime(1607):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2121)
E/AndroidRuntime(1607):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
E/AndroidRuntime(1607):     at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime(1607):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
E/AndroidRuntime(1607):     at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(1607):     at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(1607):     at android.app.ActivityThread.main(ActivityThread.java:5017)
E/AndroidRuntime(1607):     at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(1607):     at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
E/AndroidRuntime(1607):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
E/AndroidRuntime(1607):     at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(1607): Caused by: java.lang.NullPointerException
E/AndroidRuntime(1607):     at android.app.Activity.findViewById(Activity.java:1884)
E/AndroidRuntime(1607):     at com.example.lifeahead.MainActivity.<init>(MainActivity.java:22)
E/AndroidRuntime(1607):     at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(1607):     at java.lang.Class.newInstance(Class.java:1208)
E/AndroidRuntime(1607):     at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
E/AndroidRuntime(1607):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2112)
E/AndroidRuntime(1607):     ... 11 more

我感激所有能够提供帮助的人!


3
请发布完整的堆栈跟踪信息。 - Raghunandan
你在哪个活动的代码中调用了那个函数?请提供活动的代码,而不仅仅是函数。 - Guillermo Merino
4个回答

9
堆栈跟踪告诉您:
  Button logIn = (Button) findViewById(R.id.login);

findViewById 返回的对象为 null,因为你只有一个 logIn() 方法。唯一的原因是 findViewById 返回 null 是因为你在寻找一个不属于当前活动视图层次结构的视图。


2
或者可能是在onCreate之前调用了这个方法。 - Guillermo Merino
1
@GuillermoMerino 没错,但如果您在此之前调用它,它仍然不会成为活动视图层次结构的一部分。 - Blackbelt

1

Button logIn = (Button) findViewById(R.id.login);

这个错误主要是由于声明和初始化在onCreate()之外造成的。您可以在onCreate()内部声明和初始化,或者在内部调用相同的方法来声明并初始化它。


0

也许你正在使用 Fragments,并且你的问题已经在布局中得到解决了... 请查看:

<fragment ... android:name="your.package.activity" ... />    

将 android:name 重命名为新的包名!


0

您在Activity获取窗口之前调用了findViewById()。您应该在setContentView(R.layout.activity_main);之后调用findViewById()

我可以看到您在之后调用它,但我没有看到整个MainActivity.java文件。我相信您在此之前放置了另一个findViewById()

请检查com.example.lifeahead.MainActivity中的第22行。您的代码在那里失败了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接