Android登录页面setOnClickListener报错:ClassCastException问题求助
错误根源
代码里findViewById(R.id.button)获取到的是布局中的ConstraintLayout容器,而非你要绑定的Button控件,强制类型转换时触发ClassCastException,直接导致页面启动崩溃。
修复步骤
检查布局文件
activity_login.xml- 找到ID为
button的控件,确认它的类型:如果这个ID属于ConstraintLayout父容器,马上给真正的Button控件设置一个独立、唯一的ID(比如btn_login) - 确保所有控件ID不重复,父容器和子控件的ID必须区分开
- 找到ID为
修正Java代码中的控件引用
- 将
Button button = findViewById(R.id.button);里的ID替换为布局中实际Button的ID(比如R.id.btn_login) - 补充初始化未赋值的控件(否则点击按钮时会触发空指针异常):
phone_number = findViewById(R.id.你的手机号输入框ID); login_feedback = findViewById(R.id.登录提示文本ID); progressBar = findViewById(R.id.进度条ID);
- 将
清理缓存重新编译
- 执行
Build -> Clean Project,再执行Build -> Rebuild Project,避免ID缓存导致的识别错误
- 执行
修正后的代码示例
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); mAuth = FirebaseAuth.getInstance(); mCurrentUser = mAuth.getCurrentUser(); // 初始化所有需要用到的控件 phone_number = findViewById(R.id.et_phone_number); login_feedback = findViewById(R.id.tv_login_feedback); progressBar = findViewById(R.id.pb_login_progress); ok(); } public void ok(){ // 使用布局中实际Button的ID Button button = findViewById(R.id.btn_login); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String phone = phone_number.getText().toString(); if(phone.isEmpty()){ login_feedback.setText("Por favor, preencha para continuar..."); }else{ progressBar.setVisibility(View.VISIBLE); button.setEnabled(false); } } }); }
内容的提问来源于stack exchange,提问作者stack
相关产品推荐
相关产品推荐

