代码之家  ›  专栏  ›  技术社区  ›  Ranjit Vamadevan

检索firebase的类似子元素时出现问题

  •  1
  • Ranjit Vamadevan  · 技术社区  · 7 年前

    我只想一次检索date和所有date元素,并将它们存储在firebase的数组中,如下所示。

    enter image description here

        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) {
    
            }
        });
    }
    

    请帮我找到解决办法。

    2 回复  |  直到 6 年前
        1
  •  0
  •   PradyumanDixit    7 年前

    正如@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
    
        2
  •  1
  •   Peter Haddad    7 年前

    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 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) {
    
        }
     });