代码之家  ›  专栏  ›  技术社区  ›  jonny

FireBase数据库检索值,是否可以

  •  1
  • jonny  · 技术社区  · 6 年前

    我有这个代码:

    DatabaseReference mdatabase = FirebaseDatabase.getInstance().getReference("allmessages");
            mdatabase.child(mAuth.getCurrentUser().getUid()).child(userID).child(uploadID).push().setValue("somevalue");
    

    然后在另一个类中,我有这个代码:

    DatabaseReference mdatabase = FirebaseDatabase.getInstance().getReference("allmessages");
     mdatabase.child(mAuth.getCurrentUser().getUid()).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //Loop through all files in Uploads DataBase
                for(DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                    AllChatMessagesGet allChatMessagesGet = postSnapshot.getValue(AllChatMessagesGet.class);
    

    我能把所有的价值 mdatabase.child(mAuth.getCurrentUser().getUid()).child(userID).child(uploadID).push().setValue("somevalue"); 按照我上面使用的代码。

    因为它找不到任何东西。我以为上面的代码 addValueEventListener 会通过所有的儿童班 mAuth.getCurrentUser().getUid() 把“某物价值”给我重审。

    但事实并非如此。那么我如何检索“somevalue”。还有别的办法吗?因为代码是用不同的类编写的,我不知道如何获取 .Child(userID) .Child(uploadID) 这对我来说是个问题。

    不管怎样,我能重审所有的孩子吗 mdatabase.child(mAuth.getCurrentUser().getUid()) 他们的价值观 child 在它下面。

    Database Structure

    3 回复  |  直到 6 年前
        1
  •  1
  •   Alex Mamo    6 年前

    根据您的评论,获取以 -LD 在下面 -LCzWNw0nlC3GKsnPH8B 节点仅使用 rootRef.child("AllChatMessages").child(uid) ,请使用以下代码:

    String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    DatabaseReference uidRef = rootRef.child("AllChatMessages").child(uid);
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                for(DataSnapshot dSnapshot : ds.getChildren()) {
                    for(DataSnapshot snap : dSnapshot.getChildren()) {
                        String key = snap.getKey();
                        Log.d("TAG", key);
                    }
                }
            }
        }
    
        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    uidRef.addListenerForSingleValueEvent(valueEventListener);
    

    输出将是您要查找的所有ID。

        2
  •  0
  •   Simp Slayer    6 年前

    添加并实现 ChildEventListener 而不是 ValueEventListener . 您的“someValue”应该在重写的数据快照中 onChildChanged 方法。

        3
  •  0
  •   Harsh Jain    6 年前

    我写了一个代码,它的一瞥在下面的代码中。我所做的是从用户节点获取价值。我已经用下面的代码收回了它的所有子代码,您也可以用同样的方法尝试,也许它会帮助您。

    mFirebaseUserReference = FirebaseDatabase.getInstance().getReference();
     userReference = mFirebaseUserReference.child("Users");
    
            childEventListener = new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    Log.d("Values",dataSnapshot+"");
                    HashMap temp = (HashMap) dataSnapshot.getValue();
                    if (temp!=null){
                        if (!temp.get("id").equals(FirebaseAuth.getInstance().getCurrentUser().getUid())){
                            SignInModel signInModel = new SignInModel();
                            signInModel.setPhotoUrl((String)temp.get("photoUrl"));
                            signInModel.setEmail((String)temp.get("email"));
                            signInModel.setName((String)temp.get("name"));
                            signInModel.setId((String)temp.get("id"));
                            arrayList.add(signInModel);
                            adapter.notifyDataSetChanged();
                        }
                    }
                }
    
                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {
    
                }
    
                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {
    
                }
    
                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {
    
                }
    
                @Override
                public void onCancelled(DatabaseError databaseError) {
    
                }
            };
    
            userReference.addChildEventListener(childEventListener);
    

    希望有帮助。