我错了什么? 如果我点击Registrieren按钮,应用程序将停止。 项目文件: https://github.com/JonasFranzDEV/LaMamma
答案 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);