如何从Firebase实时数据库获取字符串数组

时间:2018-11-03 13:21:43

标签: java android firebase firebase-realtime-database

Firebase Realtime database structure

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]}

需要一些期望的帮助,任何建议将不胜感激。

谢谢

4 个答案:

答案 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