Моя главная цель - удалить учетную запись как в Firebase Auth, так и в базе данных Firebase.Я использую интерфейс для синхронизации приема данных, кнопку для удаления и функцию для возврата моего пользователя.
Исходные переменные:
FirebaseAuth mAuth = FirebaseAuth.getInstance();
final FirebaseUser mUser = mAuth.getCurrentUser();
DatabaseReference mUserRef = FirebaseDatabase.getInstance().getReference("Users");
Интерфейс:
public interface IMyInterface {
void returnUser(User user);
}
Кнопка удаления пользователя:
btnDeleteAccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
readUser(new IMyInterface() {
@Override
public void returnUser(User user) {
String email = user.getEmail();
String password = user.getPassword();
Log.d("EMAIL+PASSWORD", email+password);
AuthCredential credential = EmailAuthProvider
.getCredential(user.getEmail(), user.getPassword());
mUser.reauthenticate(credential).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful()) {
mUser.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
mUserRef.child(mUser.getUid()).removeValue();
mAuth.signOut();
finish();
startActivity(new Intent(MainActivity.this, LoginActivity.class));
Toast.makeText(MainActivity.this, "User account deleted!", Toast.LENGTH_SHORT).show();
}
}
});
}
}
});
}
});
}
});
И функция для получения User
с информацией о пользователе:
private void readUser(final IMyInterface myCallback) {
mUserRef.child(mUser.getUid()).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
user = dataSnapshot.getValue(User.class);
myCallback.returnUser(user);
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
Итак, после вызова кнопки онавызывает функцию для получения информации о пользователе (электронная почта и пароль), а затем использует обе данные для удаления и выхода из системы.Проблема заключается в том, что, когда последняя команда внутри кнопки заканчивается, она перезапускает кнопку на String email = user.getEmail()
, но, поскольку у нее нет экземпляра User, метод getEmail()
возвращает null
, и приложение вылетает.
Почему он снова возвращает метод?Или в синхронизации есть что-то, чего мне не хватает?У меня есть еще одна кнопка, которая заканчивается, когда используется информация о пользователе, и она должна изменить активность.