Firebase数据库的retreiving值,这是可能的

时间:2018-05-21 22:55:58

标签: java android firebase firebase-realtime-database

我有这段代码:

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()的所有子类进行检索,然后将#34; somevalue&#34}转发给我。

但它没有。那么如何检索" somevalue"。还有其他方法吗?因为代码是用不同的类编写的,我不知道如何获得.Child(userID).Child(uploadID)这对我来说会有问题。

无论如何,我仍然可以检索mdatabase.child(mAuth.getCurrentUser().getUid())的所有孩子以及他们下面child以下的值。

Database Structure

3 个答案:

答案 0 :(得分:1)

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

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。

答案 1 :(得分:0)

添加并实施ChildEventListener而不是ValueEventListener。 您的“somevalue”应该位于覆盖onChildChanged方法的DataSnapshot中。

答案 2 :(得分:0)

我已经在下面的代码中写了一段代码。我所做的是从用户节点获取价值。我已经通过以下代码收回了它的所有孩子,你也可以尝试相同的方式,也许它可以帮助你。

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

希望有所帮助。