Android Studio报错:Classifier 'id'无伴生对象需初始化问题求助
解决Kotlin中引用控件ID时的「Classifier 'id' does not have a companion object」错误
问题根源及修复步骤:
导入冲突导致ID引用错误
你代码里导入了com.example.lab10.R.id,这会让编译器把R.id.createBtn里的id当成导入的独立类,而非R类的内部嵌套类,直接抛出错误。删掉这条导入语句即可——因为你已经用了kotlinx.android.synthetic.main.activity_signup.*,可以直接通过控件ID名访问控件,不需要单独导入R.id。逻辑判断错误
原本的if条件用了||(或),意思是只要邮箱或密码有一个不为空就执行创建用户,不符合「两个字段都填完整」的需求,改成&&(且)才对。语法错误
createUser方法里的findViewById(R.id createUser)是明显的语法错误,应该写成findViewById(R.id.createBtn),或者直接用布局绑定的createBtn控件(更简洁)。
修正后的完整代码:
package com.example.lab10 import android.content.Intent import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import com.google.android.material.snackbar.Snackbar import com.google.firebase.auth.FirebaseAuth import kotlinx.android.synthetic.main.activity_signup.* class Signup : AppCompatActivity() { private lateinit var auth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_signup) auth = FirebaseAuth.getInstance() createBtn.setOnClickListener { val email = emailSignupId.text.trim().toString() val password = passwordSignupId.text.trim().toString() // 改为&&,确保邮箱和密码都不为空 if (email.isNotEmpty() && password.isNotEmpty()) { createUser(email, password) } else { // 直接用布局绑定的createBtn,无需findViewById Snackbar.make( createBtn, "请检查用户名和密码是否填写完整后重试", Snackbar.LENGTH_LONG ).show() } } } fun createUser(email: String, password: String) { auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { startActivity(Intent(this, Thankyou::class.java)) } else { // 同样直接使用createBtn Snackbar.make( createBtn, "请输入有效的用户名和密码(至少6位字符)", Snackbar.LENGTH_LONG ).show() } } } }
内容的提问来源于stack exchange,提问作者Tevin Douglas
相关产品推荐
相关产品推荐

