databaseReference = FirebaseDatabase.getInstance().getReference("/sample");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Log.d(TAG, "onDataChange: dataSnapshot "+dataSnapshot.getValue());
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我也是android应用程序开发和firebase的新手。我要从 sample 节点获取数据,并获取如下所示的DataSnapshot值。
{size=[Small, Large, Ex-Large], type=[Type 1, Type 2], color=[Red, Green, Blue], category=[T-Shirt, Jeans, Sweater]}
需要一些期望的帮助,任何建议将不胜感激。
谢谢
答案 0 :(得分:0)
要分别获取值,可以使用如下代码:
databaseReference.child("category").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (int i=0;i<3;i++) {
// category is an ArrayList you can declare above
category.add(dataSnapshot.child(String.valueOf(i)).getValue(String.class));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) { // Do something for this
}
});
类似地,您只需在此代码中更改Childs的值,即可在其他ArrayList中添加其他节点的值。
答案 1 :(得分:0)
类似这样的东西:
databaseReference = FirebaseDatabase.getInstance().getReference("/sample");
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot sampleSnapshot: dataSnapshot.getChildren()) {
Log.d(TAG, "onDataChange: sampleSnapshot "+sampleSnapshot.getKey()+" = "+sampleSnapshot.getValue());
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException(); // don't ignore errors
}
});
区别在于,在我的回答中,我遍历dataSnapshot.getChildren()
以获取每个单独的样本快照。 sampleSnapshot.getValue()
调用应返回一个List
。
答案 2 :(得分:0)
Firebase没有对数组的本机支持。如果存储数组,它实际上会存储为“对象”,并以整数作为键名。
//我们发送此
['hello', 'world']
// Firebase存储了此
{0: 'hello', 1: 'world'}
Best Practices: Arrays in Firebase
// 尝试
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
youNameArray = new ArrayList<>();
for (DataSnapshot snapshot : dataSnapshot.getChildren()){
String data = snapshot.getValue(String.class);
youNameArray.add(data);
}
Log.v("asdf", "First data : " + youNameArray.get(0));
}
答案 3 :(得分:0)
purrr
在我看来,FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference refence = database.getReference();
refence.addValueEventListener(new ValueEventListener()
{
@Override
public void onDataChange(DataSnapshot snapshot) {
// TODO Auto-generated method stub
ArrayList array= new ArrayList<>();
for (DataSnapshot ds : snapshot.getChildren()){
String data = ds.getValue().toString();
array.add(data);
}
System.out.println(array);
}
@Override
public void onCancelled(DatabaseError error) {
// TODO Auto-generated method stub
}
});
无效,而String.class
方法有效
.toString