Android:空指针异常setContentView

时间:2014-02-12 12:01:05

标签: android nullpointerexception

我错了什么? 如果我点击Registrieren按钮,应用程序将停止。 项目文件: https://github.com/JonasFranzDEV/LaMamma

4 个答案:

答案 0 :(得分:2)

您需要在调用findViewById()时加载View Hierarchy以实际获取视图的实例,否则它将为null。

在以下代码中,视图来自两个不同的布局,只会初始化当前布局中的视图,而其他视图将为null,导致NullPointerException

login = (Button) findViewById(R.id.button1);
register = (Button) findViewById(R.id.button2);
r_username = (EditText) findViewById(R.id.username);
r_password = (EditText) findViewById(R.id.password);
r_email = (EditText) findViewById(R.id.email);
username = (EditText) findViewById(R.id.editText1);
password = (EditText) findViewById(R.id.editText2);
registerForm = (Button) findViewById(R.id.register);

同样在以下代码中,您通过将Button类型转换为OnClickListener来设置clickForm Button的click侦听器,这可能会导致ClassCastException

register.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        setContentView(R.layout.register);
        registerForm.setOnClickListener((OnClickListener) register);
    }
});

答案 1 :(得分:1)

检查并确认activity_main.xml中是否存在这些字段

login = (Button) findViewById(R.id.button1);
register = (Button) findViewById(R.id.button2); 
r_username = (EditText) findViewById(R.id.username);
r_password = (EditText) findViewById(R.id.password);
r_email = (EditText) findViewById(R.id.email);
username = (EditText) findViewById(R.id.editText1);
password = (EditText) findViewById(R.id.editText2);
registerForm = (Button) findViewById(R.id.register);

答案 2 :(得分:1)

您的activity_main布局没有ID为register的视图,而您的registerform仍为null

当您的视图层次结构实际具有该视图时,即在第二个register之后{另一个findViewById()不是setContentView()时,使用setContentView()获取对{{1}}视图的引用顺便说一句好主意。

此外,您应该在问题中包含相关代码和异常堆栈跟踪,而不仅仅是链接到github项目。

答案 3 :(得分:0)

在你的活动中提升你的按钮,EditTexts ..

以这种方式: -

login = (Button) findViewById(R.id.button1);
register = (Button) findViewById(R.id.button2); 
r_username = (EditText) findViewById(R.id.username);
r_password = (EditText) findViewById(R.id.password);
r_email = (EditText) findViewById(R.id.email);
username = (EditText) findViewById(R.id.editText1);
password = (EditText) findViewById(R.id.editText2);
registerForm = (Button) findViewById(R.id.register);