Я очень новичок в разработке Android и Firebase.
Мне нужна помощь со следующим:
После того, как пользователь аутентифицируется с помощью Firebase Password Authentication (фрагмент называется SignUp), этосохраняются как пользователи-> UID-> сообщения электронной почты в Базе данных реального времени. Затем они перемещаются в новый фрагмент - фрагмент AddUsername.Этот фрагмент запрашивает уникальное имя пользователя.
То, чего я пытаюсь добиться, - это если пользователь выходит и закрывает приложение без ввода имени пользователя, сохраненные данные из базы данных реального времени удаляются из консоли Firebase и пользователь возвращается к фрагменту регистрацииперезапустить процесс регистрации.Это предотвращает создание неактивных учетных записей электронной почты или учетных записей, которые были ошибочно «закрыты», и адрес электронной почты не может быть повторно использован.
Это мой код, и я не знаю, какой код мне нужен для этого.
РЕДАКТИРОВАТЬ: я добавил этот код в onDestroyView () фрагмента AddUsername.Данные в базе данных реального времени удаляются, когда я нажимаю кнопку «Назад», но когда я закрываю приложение, данные не удаляются.
@Override
public void onDestroyView() {
super.onDestroyView();
mAuth.signOut();
mDatabase.child("users").child(user.getUid()).removeValue();
Log.i("User: ", "Not saved in database");
user.delete()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d(TAG, "User account deleted.");
}
}
});
}
Заранее спасибо.
открытый класс AddUsername расширяет Fragment реализует View.OnClickListener, TextWatcher {
public AddUsername() {
}
public interface FragmentComm {
void toSetName();
}
private TextView title, headings, handleError;
private EditText addUsername;
private Button nextButton;
private String getUsername;
private FirebaseAuth mAuth;
private FirebaseUser user;
private DatabaseReference mDatabase;
private FragmentComm fragmentComm;
@Override
public void onAttach(Context context) {
super.onAttach(context);
fragmentComm = (FragmentComm) getActivity();
user = FirebaseAuth.getInstance().getCurrentUser();
mAuth = FirebaseAuth.getInstance();
mDatabase = FirebaseDatabase.getInstance().getReference();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.add_username, container, false);
title = view.findViewById(R.id.username_title);
headings = view.findViewById(R.id.display_user_message);
handleError = view.findViewById(R.id.message_error);
addUsername = view.findViewById(R.id.addUsername);
nextButton = view.findViewById(R.id.nextButton);
nextButton.setOnClickListener(this);
addUsername.addTextChangedListener(this);
return view;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
getUsername = addUsername.getText().toString();
if (getUsername.isEmpty()) {
handleError.setVisibility(View.GONE);
nextButton.setBackgroundColor(Color.parseColor("#EEEEEE"));
nextButton.setTextColor(Color.parseColor("#BDBDBD"));
nextButton.setEnabled(false);
} else {
Query query = FirebaseDatabase.getInstance().getReference().child("users").orderByChild("username").equalTo(getUsername);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
handleError.setText(R.string.username_not_available);
handleError.setVisibility(View.VISIBLE);
handleError.setTextColor(Color.parseColor("#F50057"));
nextButton.setBackgroundColor(Color.parseColor("#EEEEEE"));
nextButton.setTextColor(Color.parseColor("#BDBDBD"));
nextButton.setEnabled(false);
} else {
handleError.setText(R.string.username_available);
handleError.setVisibility(View.VISIBLE);
handleError.setTextColor(Color.parseColor("#26C485"));
nextButton.setBackgroundColor(Color.parseColor("#0277BD"));
nextButton.setTextColor(Color.parseColor("#FFFFFF"));
nextButton.setEnabled(true);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("Give info", "Error");
}
});
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.nextButton:
checkUsernameAlreadyExist();
}
}
private void checkUsernameAlreadyExist() {
getUsername = addUsername.getText().toString();
Query query = FirebaseDatabase.getInstance().getReference().child("users").orderByChild("username").equalTo(getUsername);
query.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
handleError.setText(R.string.username_not_available);
handleError.setVisibility(View.VISIBLE);
handleError.setTextColor(Color.parseColor("#F50057"));
} else {
handleError.setText(R.string.username_available);
handleError.setVisibility(View.VISIBLE);
handleError.setTextColor(Color.parseColor("#26C485"));
fragmentComm.toSetName();
setDatabaseName();
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.i("Give info", "Error");
}
});
}
private void setDatabaseName() {
mDatabase.child("users").child(user.getUid()).child("username").setValue(getUsername);
}