出于某种原因,每次尝试启动我的应用程序时,我都会出现以下错误:
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();
}
完整日志:
电子
/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
我感谢所有帮助!
答案 0 :(得分:9)
stacktrace告诉你
Button logIn = (Button) findViewById(R.id.login);
findViewById
返回的对象为null,因为您拥有的唯一方法是logIn()
。 findViewById
返回null的唯一原因是因为您正在查找不属于当前活动的视图层次结构的视图
答案 1 :(得分:1)
Button logIn = (Button) findViewById(R.id.login);
此错误主要是由于声明,onCreate()外部完成初始化引起的。您可以在onCreate()内部声明和初始化,或者在外部声明它并使用方法通过在onCreate()内部调用它来初始化它。
答案 2 :(得分:0)
你在Activity get窗口之前调用了findViewById()
。您应该在findViewById()
之后致电setContentView(R.layout.activity_main);
。
我可以看到你之后调用它,但我没有看到整个MainActivity.java。我相信你之前在另一个地方放了另一个findViewById()
。
检查com.example.lifeahead.MainActivity
中的第22行。你的代码在那里失败了。
答案 3 :(得分:0)
也许您使用Fragments并且您的问题在布局中得到解决... 参见:
<fragment ... android:name="your.package.activity" ... />
将android:name重命名为新包名!