There is a Firebase Realtime Database into which I drive in some data during registration, they fall into the Users section under the UID key from Auth:
public void writeUserToDB(Object data, String currentUser){
DatabaseReference myRef = mDataBase.child("Users/" + currentUser);
myRef.setValue(data);
}
mRegisterBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String id = mDataBase.getKey();
String name = mName.getText().toString().trim();
String email = mEmail.getText().toString().trim();
String password = mPassword.getText().toString().trim();
String userBinder = mUserBinder.getText().toString().trim();
if (TextUtils.isEmpty(email)) {
mEmail.setError("Write your email...");
return;
}
if (TextUtils.isEmpty(password)) {
mEmail.setError("Write your password...");
return;
}
if (TextUtils.isEmpty(name)) {
mName.setError("Write your name...");
return;
}
if (password.length() < 8) {
mPassword.setError("Password must have 8+ symbols.");
return;
}
fAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
User newUser = new User(currentUser, id, name, email, password, userBinder);
currentUser = FirebaseAuth.getInstance().getCurrentUser().getUid();
writeUserToDB(newUser, currentUser);
Toast.makeText(Register.this, "Пользователь зарегистрирован.", Toast.LENGTH_LONG).show();
startActivity(new Intent(getApplicationContext(), MainActivity.class));
} else {
Toast.makeText(Register.this, "Произошла ошибка. Повторите." +
task.getException().getMessage(), Toast.LENGTH_LONG).show();
}
}
});
}
});
In firebase it looks like:
Users:
UID: {
email
name
password
userbinder
}
I need to get this data in MainActivity as String variables to use when another button is clicked. UPD - that's what I tried to do, but it doesnt work and performs a different function.
String uid = FirebaseAuth.getInstance().getUid();
mDataBase = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = mDataBase.child("Users/").child(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String email = ds.child("email").getValue(String.class);
String userBinder = ds.child("userBinder").getValue(String.class);
Log.d("TAG", email + "/" + userBinder);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d("TAG", databaseError.getMessage()); //Don't ignore potential errors!
}
};
uidRef.addListenerForSingleValueEvent(valueEventListener);
I need to use this data in MainActivity button:
mSosButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DatabaseReference databaseReference = FirebaseDatabase.getInstance()
.getReference().child("Sos");
Toast.makeText(MainActivity.this, "Message sended!", Toast.LENGTH_LONG).show();
Sos sos = new Sos(user_email, binded_user_email);
databaseReference.push().setValue(sos);
}
});