[英]How to get data from a child in Firebase Database?
我正在努力從我的數據庫中的一個孩子那里獲取數據以在TextView
中設置文本。
這是我的數據庫:數據庫
我認為問題是我在Ansatte
之后沒有 Uid,而是name
。 如果我拿走name
,並且只有Ansatte
、 Uid 和數據的 rest ,它就可以工作。
這是我獲取數據的代碼:
databaseReference = FirebaseDatabase.getInstance("").getReference("Ansatte");
btnadd = (findViewById(R.id.btn_leggtilansatt));
mAuth = FirebaseAuth.getInstance();
currentid = mAuth.getCurrentUser().getUid();
tvtest = findViewById(R.id.tvtest);
databaseReference.child(currentid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if (snapshot.exists()){
String user = snapshot.child("name").getValue().toString();
tvtest.setText(user);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
這是存儲代碼:
private void add() {
String name = editText1.getText().toString().trim();
String email = editText2.getText().toString().trim();
String storage = editText3.getText().toString().trim();
String password = tv.getText().toString().trim();
if (!TextUtils.isEmpty(name)){
mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()){
Ansatt ansatt = new Ansatt (name, email, storage);
databaseAnsatt.child(name).child(mAuth.getUid()).setValue(ansatt);
Toast.makeText(getApplicationContext(), "Hei" , Toast.LENGTH_LONG).toString().trim();
Intent intent = new Intent(AddEmployeeActivity.this, MainActivity.class);
startActivity(intent);
}
}
});
}
為了能夠獲取存在於以下位置下的name
字段的值:
root/Ansatte/Name/$uid
請使用以下代碼行:
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference uidRef = db.child("Ansatte").child("Name").child(uid);
uidRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
DataSnapshot snapshot = task.getResult();
String name = snapshot.child("name").getValue(String.class);
tvtest.setText(name);
Log.d("TAG", name);
} else {
Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
}
}
});
logcat 中的結果將是:
name
而這個值也會被設置為你的tvtest
TextView。
PS 不要忘記設置適當的安全規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.