[英]How to get data about a specific user from Firebase
有一個 Firebase 實時數據庫,我在注冊期間將一些數據導入其中,它們屬於來自 Auth 的 UID 鍵下的用戶部分:
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();
}
}
});
}
});
在firebase中它看起來像:
Users:
UID: {
email
name
password
userbinder
}
我需要在 MainActivity 中將這些數據作為字符串變量獲取,以便在單擊另一個按鈕時使用。 UPD - 這就是我試圖做的,但它不起作用並執行不同的功能。
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);
我需要在 MainActivity 按鈕中使用這些數據:
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);
}
});
為了能夠獲取登錄用戶的數據,您必須附加一個完全指向Users
節點的偵聽器。 所以請使用以下代碼行:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = db.child("Users").child(uid);
uidRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
DataSnapshot snapshot = task.getResult();
String email = snapshot.child("email").getValue(String.class);
String userBinder = snapshot.child("userBinder").getValue(String.class);
Log.d("TAG", email + "/" + userBinder);
} else {
Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
}
}
});
請注意,不需要循環遍歷結果。 您只需要獲取與這兩個字段對應的數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.