安卓Firebase注册系统点击注册后ProgressBar不消失且无提示求助
Firebase安卓注册系统异常修复方案
问题现象
点击注册按钮后,ProgressBar持续旋转无法隐藏,注册成功或失败的Toast提示均未显示。
布局代码
<ImageView android:id="@+id/waves_atas" android:layout_width="match_parent" android:layout_height="420dp" android:scaleType="centerCrop" android:src="@drawable/wave" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.0" /> <ImageView android:id="@+id/imageView" android:layout_width="250dp" android:layout_height="250dp" android:src="@drawable/logo_nm" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/waves_atas" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/waves_atas" app:layout_constraintVertical_bias="0.0" /> <ImageView android:id="@+id/emaillogin" android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/emaillog" app:layout_constraintBottom_toTopOf="@+id/button_daftar" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.2" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@+id/imageView" app:layout_constraintVertical_bias="0.81" app:tint="@color/pucat" /> <EditText android:id="@+id/textregisemail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="@color/pucat" android:ems="10" android:fontFamily="@font/robotocondensedregular" android:textColor="@color/black" android:textColorHint="@color/pucat" android:hint="@string/atur_email_anda" android:inputType="textEmailAddress" app:layout_constraintBottom_toBottomOf="@+id/emaillogin" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.11" app:layout_constraintStart_toEndOf="@+id/emaillogin" app:layout_constraintTop_toTopOf="@+id/emaillogin" app:layout_constraintVertical_bias="1.0" /> <ImageView android:id="@+id/passwordlogin" android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/key" app:layout_constraintBottom_toTopOf="@+id/button_daftar" app:layout_constraintEnd_toEndOf="@+id/emaillogin" app:layout_constraintHorizontal_bias="0.2" app:layout_constraintStart_toStartOf="@+id/emaillogin" app:layout_constraintTop_toBottomOf="@+id/emaillogin" app:layout_constraintVertical_bias="0.35000002" app:tint="@color/pucat" /> <EditText android:id="@+id/textregispassword" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="@color/pucat" android:ems="10" android:fontFamily="@font/robotocondensedregular" android:hint="@string/atur_password_anda" android:inputType="textPassword" android:textColor="@color/black" android:textColorHint="@color/pucat" app:layout_constraintBottom_toBottomOf="@+id/passwordlogin" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.11" app:layout_constraintStart_toEndOf="@+id/passwordlogin" app:layout_constraintTop_toTopOf="@+id/passwordlogin" app:layout_constraintVertical_bias="0.63" /> <Button android:id="@+id/button_daftar" android:layout_width="200dp" android:layout_height="wrap_content" android:background="@drawable/radius" android:fontFamily="@font/poppinsregular" android:text="@string/daftar" android:textColor="@color/white" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/textregispassword" app:layout_constraintStart_toStartOf="@+id/passwordlogin" app:layout_constraintTop_toBottomOf="@+id/waves_atas" app:layout_constraintVertical_bias="0.3" /> <TextView android:id="@+id/textsatu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="18dp" android:fontFamily="@font/robotocondensedregular" android:text="@string/sudah_memiliki_akun" android:textColor="@color/pucat" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="@+id/button_daftar" app:layout_constraintHorizontal_bias="0.15" app:layout_constraintStart_toStartOf="@+id/button_daftar" app:layout_constraintTop_toBottomOf="@+id/button_daftar" app:layout_constraintVertical_bias="0.050000012" /> <TextView android:id="@+id/kelogin" android:layout_width="wrap_content" android:layout_height="wrap_content" android:fontFamily="@font/poppinsregular" android:text="@string/login" android:textColor="@color/biru_ng" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.07" app:layout_constraintStart_toEndOf="@+id/textsatu" app:layout_constraintTop_toTopOf="@+id/textsatu" app:layout_constraintVertical_bias="0.0" /> <ImageView android:id="@+id/userregis" android:layout_width="25dp" android:layout_height="25dp" android:src="@drawable/key" app:layout_constraintBottom_toTopOf="@+id/emaillogin" app:layout_constraintEnd_toEndOf="@+id/emaillogin" app:layout_constraintStart_toStartOf="@+id/emaillogin" app:layout_constraintTop_toBottomOf="@+id/imageView" app:layout_constraintVertical_bias="0.53" app:tint="@color/pucat" /> <EditText android:id="@+id/textuserregis" android:layout_width="wrap_content" android:layout_height="wrap_content" android:backgroundTint="@color/pucat" android:textColor="@color/black" android:textColorHint="@color/pucat" android:ems="10" android:fontFamily="@font/robotocondensedregular" android:hint="@string/masukan_username_anda" android:inputType="textVisiblePassword" app:layout_constraintBottom_toBottomOf="@+id/userregis" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.11" app:layout_constraintStart_toEndOf="@+id/userregis" app:layout_constraintTop_toTopOf="@+id/userregis" /> <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="gone" tools:ignore="MissingConstraints" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" />
原始Java代码
private TextView registerUser; private EditText editTextUserName, editTextEmail, editTextPassword; private ProgressBar progressBar; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_daftar); mAuth = FirebaseAuth.getInstance(); registerUser = (Button) findViewById(R.id.button_daftar); registerUser.setOnClickListener(this); editTextUserName = (EditText) findViewById(R.id.textuserregis); editTextEmail = (EditText) findViewById(R.id.textregisemail); editTextPassword = (EditText) findViewById(R.id.textregispassword); progressBar = (ProgressBar) findViewById(R.id.progressBar); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_daftar: registerUser(); break; } } private void registerUser() { String fullName = editTextUserName.getText().toString().trim(); String email = editTextEmail.getText().toString().trim(); String password = editTextPassword.getText().toString().trim(); if (fullName.isEmpty()) { editTextUserName.setError("Isi username anda"); editTextUserName.requestFocus(); return; } if (password.isEmpty()) { editTextPassword.setError("Tentukan Password Anda"); editTextPassword.requestFocus(); return; } if (email.isEmpty()) { editTextEmail.setError("Isi email anda"); editTextEmail.requestFocus(); return; } if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { editTextEmail.setError("mohon gunakan email yang valid (contoh = seseorang@gmail.com)"); editTextEmail.requestFocus(); return; } if (password.isEmpty()) { editTextPassword.setError("Mohon atur password anda"); editTextPassword.requestFocus(); return; } if (password.length() < 6) { editTextPassword.setError("Minimal terdiri dari 6 karakter"); editTextPassword.requestFocus(); return; } progressBar.setVisibility(View.VISIBLE); mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { User user = new User(fullName, email); FirebaseDatabase.getInstance().getReference("Users") .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Toast.makeText(daftar.this, "Registrasi Berhasil", Toast.LENGTH_LONG).show(); progressBar.setVisibility(View.GONE); } else { Toast.makeText(daftar.this, "Registrasi Gagal, Coba lagi", Toast.LENGTH_LONG).show(); progressBar.setVisibility(View.GONE); } } }); } else { Toast.makeText(daftar.this, "Registrasi Gagal", Toast.LENGTH_LONG).show(); progressBar.setVisibility(View.GONE); } } }); } }
问题根源与修复步骤
核心错误:控件类型不匹配
代码中registerUser被声明为TextView,但实际是布局中的Button,强转错误会导致点击事件绑定失效,后续注册逻辑完全不执行,ProgressBar一直处于显示状态。
修复:将private TextView registerUser;改为private Button registerUser;冗余校验清理
代码中重复判断password.isEmpty(),删除其中一处即可,避免逻辑冗余。UI操作线程安全优化
虽然Firebase的onComplete默认在主线程执行,但显式使用runOnUiThread包裹Toast和ProgressBar操作,可避免潜在的线程异常问题。添加异常信息捕获
在失败分支中获取task.getException().getMessage(),能显示具体错误原因,便于排查注册失败问题(如邮箱已存在、网络异常等)。
修复后的Java代码
private Button registerUser; private EditText editTextUserName, editTextEmail, editTextPassword; private ProgressBar progressBar; private FirebaseAuth mAuth; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_daftar); mAuth = FirebaseAuth.getInstance(); registerUser = findViewById(R.id.button_daftar); registerUser.setOnClickListener(this); editTextUserName = findViewById(R.id.textuserregis); editTextEmail = findViewById(R.id.textregisemail); editTextPassword = findViewById(R.id.textregispassword); progressBar = findViewById(R.id.progressBar); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.button_daftar: registerUser(); break; } } private void registerUser() { String fullName = editTextUserName.getText().toString().trim(); String email = editTextEmail.getText().toString().trim(); String password = editTextPassword.getText().toString().trim(); if (fullName.isEmpty()) { editTextUserName.setError("Isi username anda"); editTextUserName.requestFocus(); return; } if (email.isEmpty()) { editTextEmail.setError("Isi email anda"); editTextEmail.requestFocus(); return; } if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { editTextEmail.setError("mohon gunakan email yang valid (contoh = seseorang@gmail.com)"); editTextEmail.requestFocus(); return; } if (password.isEmpty()) { editTextPassword.setError("Mohon atur password anda"); editTextPassword.requestFocus(); return; } if (password.length() < 6) { editTextPassword.setError("Minimal terdiri dari 6 karakter"); editTextPassword.requestFocus(); return; } progressBar.setVisibility(View.VISIBLE); mAuth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { User user = new User(fullName, email); FirebaseDatabase.getInstance().getReference("Users") .child(FirebaseAuth.getInstance().getCurrentUser().getUid()) .setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { runOnUiThread(() -> { progressBar.setVisibility(View.GONE); if (task.isSuccessful()) { Toast.makeText(daftar.this, "Registrasi Berhasil", Toast.LENGTH_LONG).show(); } else { String errorMsg = task.getException() != null ? task.getException().getMessage() : "Registrasi Gagal, Coba lagi"; Toast.makeText(daftar.this, errorMsg, Toast.LENGTH_LONG).show(); } }); } }); } else { runOnUiThread(() -> { progressBar.setVisibility(View.GONE); String errorMsg = task.getException() != null ? task.getException().getMessage() : "Registrasi Gagal"; Toast.makeText(daftar.this, errorMsg, Toast.LENGTH_LONG).show(); }); } } }); }
内容的提问来源于stack exchange,提问作者Jiilan .T
相关产品推荐
相关产品推荐

