我正在建立注册活动,在其中使用文本监视程序查看电子邮件或密码是否为空,如果一切正确,则应该通过firebase auth进行验证,还将注册按钮的不透明度设置为100%,但是什么都不做
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register)
val email = email_editText_register.text.toString()
val password = password_editText_register.text.toString()
registrar_button_register.alpha = 0.5f
registrar_button_register.addTextChangedListener(object : TextWatcher{
override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
val emailInput = email_editText_register.getText().toString().trim()
val passwordInput = password_editText_register.getText().toString().trim()
registrar_button_register.setEnabled(!emailInput.isNotEmpty() && !passwordInput.isNotEmpty())
}
override fun afterTextChanged(s: Editable) {
registrar_button_register.setOnClickListener {
registrar_button_register.animate().alpha(1f).setDuration(200)
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
//createUserWithEmailAndPassword(email, password)
.addOnCompleteListener {
if (!it.isSuccessful) return@addOnCompleteListener
// Sign in success, update UI with the signed-in user's information
Log.d("register", "Successfully created with uid: ${it.result?.user?.uid}")
val intent = Intent(applicationContext, Inicio::class.java)
startActivity(intent)
}
.addOnFailureListener {
Log.d("main", "Failed to create user: ${it.message}")
Toast.makeText(getApplicationContext(), "the email already exist or it is not valid", Toast.LENGTH_SHORT).show()
}
}
}
})
这是布局
<EditText
android:layout_width="0dp"
android:layout_height="40dp"
android:inputType="textPersonName"
android:ems="10"
android:paddingLeft="20dp"
android:id="@+id/username_editText_register"
android:hint="Usuario"
style="@android:style/Widget.AutoCompleteTextView"
android:background="#F3F3F3" android:textAlignment="viewStart" android:textIsSelectable="true"
android:textSize="14dp"
app:layout_constraintEnd_toEndOf="@+id/email_editText_register"
app:layout_constraintStart_toStartOf="@+id/email_editText_register" android:layout_marginTop="12dp"
app:layout_constraintTop_toBottomOf="@+id/email_editText_register"/>
<EditText
android:layout_width="0dp"
android:layout_height="40dp"
android:inputType="textEmailAddress"
android:ems="10"
android:paddingLeft="20dp"
android:id="@+id/email_editText_register"
android:hint="E-mail"
android:background="#F3F3F3" android:textSize="14dp"
android:layout_marginEnd="24dp"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginStart="24dp"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="1.0"
android:layout_marginTop="160dp" app:layout_constraintTop_toTopOf="parent"/>
<Button
android:text="Registrar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="#CC196AE0"
android:textColor="#FFFFFF" android:textStyle="bold" android:id="@+id/registrar_button_register"
app:layout_constraintStart_toStartOf="@+id/password_editText_register"
app:layout_constraintEnd_toEndOf="@+id/password_editText_register" android:layout_marginTop="12dp"
app:layout_constraintTop_toBottomOf="@+id/password_editText_register"/>
<TextView
android:text="Volver"
android:layout_width="0dp"
android:layout_height="50dp"
android:id="@+id/volver_textView_register" app:layout_constraintStart_toStartOf="@+id/registrar_button_register"
app:layout_constraintEnd_toEndOf="@+id/registrar_button_register"
android:layout_marginTop="14dp" app:layout_constraintTop_toBottomOf="@+id/registrar_button_register"
android:textStyle="bold" android:textSize="14dp" android:textAlignment="center"
android:textColor="#050505"/>
<EditText
android:layout_width="0dp"
android:layout_height="40dp"
android:inputType="textPassword"
android:ems="10"
android:paddingLeft="20dp"
android:id="@+id/password_editText_register" android:layout_marginTop="12dp"
app:layout_constraintTop_toBottomOf="@+id/username_editText_register"
app:layout_constraintEnd_toEndOf="@+id/username_editText_register"
app:layout_constraintStart_toStartOf="@+id/username_editText_register" android:background="#f3f3f3"
android:hint="Contraseña" android:textSize="14dp"/>
输入正确后,按钮应该是100%不透明的,注册也应该起作用,然后转到下一个称为“ Inicio”的活动
感谢所有提供帮助的人,这是最终代码,已修复所有问题,以防万一有人需要它。
重写乐趣onCreate(savedInstanceState:Bundle?){ super.onCreate(savedInstanceState)
setContentView(R.layout.activity_register)
registrar_button_register.setEnabled(false)
registrar_button_register.animate().alpha(0.5f).setDuration(200)
val textWatcher = object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
val emailInput = email_editText_register.getText().toString().trim()
val passwordInput = password_editText_register.getText().toString().trim()
registrar_button_register.setEnabled(emailInput.isNotEmpty() && passwordInput.isNotEmpty())
val isEnabled = emailInput.isNotEmpty() && passwordInput.isNotEmpty()
registrar_button_register.setEnabled(isEnabled)
if (isEnabled) {
registrar_button_register.animate().alpha(1f).setDuration(200)
} else {
registrar_button_register.animate().alpha(0.5f).setDuration(200)
}
}
}
email_editText_register.addTextChangedListener(textWatcher)
password_editText_register.addTextChangedListener(textWatcher)
Toast.makeText(this, "d", Toast.LENGTH_SHORT).show()
registrar_button_register.setOnClickListener {
val email = email_editText_register.text.toString()
val password = password_editText_register.text.toString()
Log.d("Register", "Email is: " + email)
Log.d("Register", "password is: $password")
email_editText_register.addTextChangedListener(textWatcher)
password_editText_register.addTextChangedListener(textWatcher)
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
//createUserWithEmailAndPassword(email, password)
.addOnCompleteListener {
if (!it.isSuccessful) return@addOnCompleteListener
// Sign in success, update UI with the signed-in user's information
Log.d("register", "Successfully created with uid: ${it.result?.user?.uid}")
Toast.makeText(this, "td", Toast.LENGTH_SHORT).show()
val intent = Intent(applicationContext, Inicio::class.java)
startActivity(intent)
}
.addOnFailureListener {
Log.d("main", "Failed to create user: ${it.message}")
Toast.makeText(this, "the email already exist or it is not valid", Toast.LENGTH_SHORT).show()
}
}
答案 0 :(得分:1)
如果两个字段都不为空,则要启用该按钮,因此应该为:
registrar_button_register.setEnabled(emailInput.isNotEmpty() && passwordInput.isNotEmpty())
您需要添加文本监视程序来编辑文本字段,而不是按钮。 您应该创建TextWatcher实例并将其附加到edittexts,例如:
val textWatcher = object: TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
val emailInput = email_editText_register.getText().toString().trim()
val passwordInput = password_editText_register.getText().toString().trim()
val isEnabled = emailInput.isNotEmpty() && passwordInput.isNotEmpty()
registrar_button_register.setEnabled(isEnabled)
if(isEnabled) {
registrar_button_register.animate().alpha(1f).setDuration(200)
}
else {
registrar_button_register.animate().alpha(0.5f).setDuration(200)
}
}
}
email_editText_register.addTextChangedListener(textWatcher);
password_editText_register.addTextChangedListener(textWatcher);
registrar_button_register.setOnClickListener {
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
//createUserWithEmailAndPassword(email, password)
.addOnCompleteListener {
if (!it.isSuccessful) return@addOnCompleteListener
// Sign in success, update UI with the signed-in user's information
Log.d("register", "Successfully created with uid: ${it.result?.user?.uid}")
val intent = Intent(applicationContext, Inicio::class.java)
startActivity(intent)
}
.addOnFailureListener {
Log.d("main", "Failed to create user: ${it.message}")
Toast.makeText(getApplicationContext(), "the email already exist or it is not valid", Toast.LENGTH_SHORT).show()
}
}
答案 1 :(得分:0)
我觉得你很困惑。我认为您是在Button而不是EdiText上使用addTextChangedListener。
当文本更改时,将触发addTextChangedListener方法,并且按钮文本从不更改。
您要做的是在电子邮件和密码对象上实现相同的textChangedListener对象。
答案 2 :(得分:0)
您正在以异步方式进行Firebase身份验证,因此需要以同步方式(使用Task.wait())进行Firebase身份验证。