如何从Firebase中的表格中获取值?

时间:2018-01-18 12:52:36

标签: android firebase firebase-realtime-database

如何从Firebase中的某个桌子的子项中获取值?

我一直在堆叠溢出上找到的所有答案对此都很少甚至没有答案,我认为这是非常基本的。

这是我的表: enter image description here

我想获取亚当的图片或分数数据。不使用实际名称“adam”而是使用位置编号0。

到目前为止,我只能得到孩子的大小,就像这样

FirebaseDatabase database = FirebaseDatabase.getInstance();
                DatabaseReference myRef = database.getReference("table_one");
//
//                myRef.setValue("Check 2!");

                // Read from the database
                myRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        // This method is called once with the initial value and again
                        // whenever data at this location is updated.
//                        String value = dataSnapshot.getValue(String.class);
                        Log.d("check", "count is: " + dataSnapshot.getChildrenCount());

                    }

                    @Override
                    public void onCancelled(DatabaseError error) {
                        // Failed to read value
                        Log.w("check", "Failed to read value.", error.toException());
                    }
                });

是不是有一种简单的方法来获取该表的所有子项并查看它们?

2 个答案:

答案 0 :(得分:0)

您可以创建ArrayList,然后使用list.get(0),如下所示:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference tableOneRef = rootRef.child("table_one");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String pic = ds.child("pic").getValue(String.class);
            list.add(pic);
        }
        Log.d("TAG", list.get(0));
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
tableOneRef.addListenerForSingleValueEvent(eventListener);

输出中的结果将是:http://...

还有一件事要提到,第一个对象中的score属于String类型,第二个属性为Integer类型。确保所有对象中的score具有相同的类型。

答案 1 :(得分:0)

获取所有子项并使{name}和userImage

成为Map
Map<String , String> usersWithImages = new HashMap<>();

...

FirebaseDatabase.getInstance().getReference().rootRef.child("table_one").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String user = ds.getKey()
            String image = ds.child("pic").getValue(String.class);
            usersWithImages.put(user , image);
        }
    }
    ...
});

...

//some where
String adamImage = usersWithImages.get('adam');
System.out.println(adamImage);