Salve sto effettuando un progetto universitario, utilizzando MVP e il pattern Dao con firebase:
Il problema è che non mi si crea la tabella "User" nel database di firebase con le informazioni inserite nella GUI, potete aiutarmi a capire il perché?
Grazie infinite :)
Java:
import com.example.natour2022.Dao.Listeners.RetrievalEventListener;
import com.example.natour2022.model.User;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
public class UserDao extends FirebaseDao<User> {
public UserDao() {
super("User");
}
@Override
public void parseDataSnapshot(DataSnapshot dataSnapshot, RetrievalEventListener<User> retrievalEventListener) {
final User currUser = new User();
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
currUser.setId(dataSnapshot.getKey());
if (dataSnapshot.child("email").getValue() != null) {
currUser.setNickname(dataSnapshot.child("nickname").getValue().toString());
currUser.setEmail(dataSnapshot.child("email").getValue().toString());
currUser.setPassword(dataSnapshot.child("password").getValue().toString());
retrievalEventListener.OnDataRetrieved(currUser);
} else {
FirebaseAuth.getInstance().signOut();
}
}
}
Java:
public abstract class FirebaseDao<T> {
protected static final DatabaseReference dbReference = FirebaseDatabase.getInstance().getReference();
protected String tableName;
public FirebaseDao(String tableName)
{
this.tableName = tableName;
}
protected abstract void parseDataSnapshot(DataSnapshot dataSnapshot, RetrievalEventListener<T> retrievalEventListener);
public void save(T t, String id, final TaskListener taskListener){
Task<Void> task = dbReference.child(tableName).child(id).setValue(t);
task.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
taskListener.OnSuccess();
}
});
task.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
taskListener.OnFail();
}
});
}
public String getNewKey() {
return dbReference.child(tableName).push().getKey();
}
}
Java:
public class SingUpPresenter {
private final SingUpFragment singUpFragment;
private MainActivity mainActivity;
private FirebaseAuth auth;
private DatabaseReference referenceDb;
private UserDao userDao;
private User currUser;
private FirebaseUser user;
public SingUpPresenter(SingUpFragment singUpFragment) {
this.singUpFragment = singUpFragment;
}
private boolean isValidEmail(String email) {
return android.util.Patterns.EMAIL_ADDRESS.matcher(email).matches();
}
public static boolean isValidPassword(String password) {
/*
^ : inizio stringa
(?=[A-Z0-9]*[a-z]) : guarda avanti per assicurarci almeno un carattere minuscolo
(?=[a-zA-Z]*[0-9]) : guarda avanti per assicurarci almeno un cifra
(?=[a-z0-9]*[A-Z]) : guarda avanti per assicurarci almeno un carattere maiuscolo
[a-zA-Z0-9]{8,} : acquisisce otto p più caratteri alfanumerici
$ : corrisponde alla fine della stringa
*/
Pattern PASSWORD_PATTERN
= Pattern.compile(
"^(?=[A-Z0-9]*[a-z])(?=[a-zA-Z]*[0-9])(?=[a-z0-9]*[A-Z])[a-zA-Z0-9]{8,}$");
return PASSWORD_PATTERN.matcher(password).matches();
}
public void onButtonSignUpClicked() {
Resources resources = singUpFragment.getMainActivity().getResources();
singUpFragment.setEnabledButtonSignUp(false);
singUpFragment.cleanTextInputErrors();
String email = singUpFragment.getEmail();
String password = singUpFragment.getPassword();
String nickname = singUpFragment.getNickname();
if (nickname.length() == 0) {
singUpFragment.setTextInputNicknameError(
resources.getString(R.string.fragment_sign_up_enter_nickname)
);
singUpFragment.setEnabledButtonSignUp(true);
} else if (email.length() == 0) {
singUpFragment.setTextInputEmailError(
resources.getString(R.string.fragment_sign_up_enter_email)
);
singUpFragment.setEnabledButtonSignUp(true);
} else if (!isValidEmail(email)) {
singUpFragment.setTextInputEmailError(
resources.getString(R.string.fragment_sign_up_invalid_email)
);
singUpFragment.setEnabledButtonSignUp(true);
} else if (password.length() == 0) {
singUpFragment.setTextInputPasswordError(
resources.getString(R.string.fragment_sign_up_enter_password)
);
singUpFragment.setEnabledButtonSignUp(true);
} else if (!isValidPassword(password)) {
singUpFragment.setTextInputPasswordError(
resources.getString(R.string.fragment_sign_up_enter_password1)
);
singUpFragment.setEnabledButtonSignUp(true);
} else {
singUpFragment.progressBar.setVisibility(View.VISIBLE);
UserDao userDao = new UserDao();
userDao.save(currUser, userDao.getNewKey(), new TaskListener() {
@Override
public void OnSuccess() {
Toast.makeText(singUpFragment.getActivity(), "SingUp performed successfully", Toast.LENGTH_SHORT).show();
openSingInFragment();
}
@Override
public void OnFail() {
Toast.makeText(singUpFragment.getActivity(), "SingUp failed. Please try again", Toast.LENGTH_SHORT).show();
}
});
}
}
public void openSingInFragment() {
Fragment fragment = new SingInFragment(mainActivity);
FragmentManager fragmentManager = singUpFragment.getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.activity_sing_in_sing_up, fragment).commit();
}
}
Java:
public class SingUpFragment extends Fragment {
private static MainActivity mainActivity;
private SingUpPresenter signUpPresenter;
private TextInputLayout email;
private TextInputLayout password;
private TextInputLayout nickname;
private Button buttonSignUp;
private TextView nomeApp;
public ProgressBar progressBar;
private ImageButton buttonBackSingUp;
private FirebaseUser user;
public SingUpFragment(MainActivity mainActivity) {
this.mainActivity = mainActivity;
}
public MainActivity getStartActivity() {
return mainActivity;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(@NotNull LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment__sing_up, container, false);
}
public void onViewCreated(@NonNull final View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
nomeApp = view.findViewById(R.id.fragment_sing_up_textView_nameApp);
email = view.findViewById(R.id.fragment_sign_up_text_input_email_layout);
password = view.findViewById(R.id.fragment_sign_up_text_input_password_layout);
nickname = view.findViewById(R.id.fragment_sign_up_text_input_nickname_layout);
buttonSignUp = view.findViewById(R.id.fragment_sign_up_button_sign_up);
progressBar = view.findViewById(R.id.progressBar_SingUp);
buttonBackSingUp = view.findViewById(R.id.btBack_singUp);
user = FirebaseAuth.getInstance().getCurrentUser();
signUpPresenter = new SingUpPresenter(this);
initializeUserInterface();
listenToClickEvents();
}
private void openSingInFragment(Fragment fragment) {
FragmentManager fragmentManager = mainActivity.getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.fade_in, R.anim.fade_out);
fragmentTransaction.add(R.id.fragment_sing_in, fragment).commit();
}
private void initializeUserInterface() {
nomeApp.setAlpha(0.0f);
nickname.setAlpha(0.0f);
email.setAlpha(0.0f);
password.setAlpha(0.0f);
buttonSignUp.setAlpha(0.0f);
buttonBackSingUp.setAlpha(0.0f);
nomeApp.animate().alpha(1.0f).setDuration(1000);
nickname.animate().alpha(1.0f).setDuration(2000);
email.animate().alpha(1.0f).setDuration(2500);
password.animate().alpha(1.0f).setDuration(3000);
buttonSignUp.animate().alpha(1.0f).setDuration(3500);
buttonBackSingUp.animate().alpha(1.0f).setDuration(4000);
}
public void startClosingTransition() {
int screenHeight = mainActivity.getScreenHeight();
email.animate().translationY(screenHeight/100f*66f).setDuration(2500);
password.animate().translationY(screenHeight/100f*55.5f).setDuration(2250);
nickname.animate().translationY(screenHeight/100f*45f).setDuration(2000);
buttonSignUp.animate().translationY(screenHeight/100f*12f).setDuration(1250);
}
private void listenToClickEvents() {
buttonSignUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
signUpPresenter.onButtonSignUpClicked();
}
});
buttonBackSingUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(getActivity(), MainActivity.class);
startActivity(intent);
}
});
}
public void cleanTextInputErrors() {
email.setErrorEnabled(false);
password.setErrorEnabled(false);
nickname.setErrorEnabled(false);
}
public MainActivity getMainActivity() {
return mainActivity;
}
public String getEmail() {
EditText emailEditText = email.getEditText();
if(emailEditText == null) return "";
return emailEditText.getText().toString();
}
public String getNickname() {
EditText nicknameEditText = nickname.getEditText();
if(nicknameEditText == null) return "";
return nicknameEditText.getText().toString();
}
public String getPassword() {
EditText passwordEditText = password.getEditText();
if(passwordEditText == null) return "";
return passwordEditText.getText().toString();
}
public void setEnabledButtonSignUp(boolean enabled) {
buttonSignUp.setEnabled(enabled);
}
public void setTextInputEmailError(String error) {
email.setErrorEnabled(true);
email.setError(error);
}
public void setTextInputNicknameError(String error) {
nickname.setErrorEnabled(true);
nickname.setError(error);
}
public void setTextInputPasswordError(String error) {
password.setErrorEnabled(true);
password.setError(error);
}
}
Java:
public class User {
public String id;
private String nickname;
private String email;
private String password;
/* public User(String nickname, String email, String password) {
this.nickname = nickname;
this.email = email;
this.password = password;
}*/
public void setId(String id) {
this.id = id;
}
public String getId() {
return id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
Grazie infinite :)
Ultima modifica: