我想一次只检索日期和所有date元素,并将它们存储在firebase中的数组中,如下所示。
我使用以下代码进行检索,但未能成功。
public void showData(View view) {
final ArrayList<String> date = new ArrayList<>();
firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Date");
firebaseDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
date.add(dataSnapshot.getValue().toString());
display.setText(dataSnapshot.getValue().toString());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
请帮助找到解决方案。
答案 0 :(得分:1)
firebase参考错误,您应该从顶部节点转到日期节点。
更改此:
firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Date");
对此:
firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Name");
firebaseDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot datas: dataSnapshot.getChildren()){
date.add(datas.child("Date").getValue().toString());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
由于您想获得全部 Date
,然后将Firebase引用放在节点Name
上并在名称中循环以能够检索所有日期。
如果要获取一个用户示例Ravi
的日期,则不需要循环,可以执行以下操作:
firebaseDatabase = FirebaseDatabase.getInstance().getReference().child("Name").child("Ravi").child("Date");
firebaseDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
date.add(dataSnapshot.getValue().toString());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 1 :(得分:0)
如@PeterHaddad在上一个答案中所述,访问您获取的数据的顺序不正确。如果到目前为止没有其他帮助,您可以尝试这种方式。
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("Names").orderByChild("Date").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for(DataSnapshot ds: dataSnapshot.getChildren()){
date.add(ds.getValue(String.class));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
//Also as you've told that code is not working, please tell, what exactly is not working