如何使用`Firebase`中的`DataSnapshot`获取特定值

时间:2017-09-05 04:49:58

标签: android firebase firebase-realtime-database

我想从DataSnapshot使用特定价值。
我在这里附上截图,请检查并帮助我从Realtime Database获得特定价值 enter image description here

实际上我正在实施chat应用,我希望从user获取group_list的价值。 这是我的代码。

    private void loadTotalGroupList() {

        referenceMainUrl = FirebaseDatabase.getInstance().getReferenceFromUrl("https://pure-coda-174710.firebaseio.com");
        referenceGroupList = referenceMainUrl.child("group_list");

        //Check if child is available or not.
        referenceGroupList.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {


                    Log.e("dataSnapshot","  ==>"+dataSnapshot);
                    Map<String, Object> newPost = (Map<String, Object>) dataSnapshot.getValue();

                    Log.e("newPost","  ==>"+newPost);

                   Log.e("user: ","==>" + newPost.get("user"));  // Here I am getting null value


                } else {
                    Log.e("Child not found", " >>>");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
    }  

log显示如下。 DataSnapshot {key = group_list,value = {First Group = { - KtBH9gnTszNxcXjNu9A = {message = assaasas,user = sakib}}}}

3 个答案:

答案 0 :(得分:0)

您正在聆听代码中的位置/group_list。这意味着该位置的快照将包含以下内容:

/First Group
    /-KtBH9gnTszNxcXjNu9A
        message = "..."
        user = "..."

如果您想从该位置获取用户值,您必须使用每个中间路径深入了解它:

dataSnapshot.child("First Group").child("-KtBH9gnTszNxcXjNu9A").child("user").getValue()

或更简单:

dataSnapshot.child("First Group"/-KtBH9gnTszNxcXjNu9A/user").getValue()

您无法跳过快照中的中间路径。或者,您可能希望收听更接近所需值的位置:

referenceMainUrl.child("group_list/First Group/-KtBH9gnTszNxcXjNu9A");

答案 1 :(得分:0)

此代码循环运行,为您提供所有'用户

的值
"%04d"

答案 2 :(得分:0)

我已使用addChildEventListener

解决了我的问题
    referenceGroupList.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String prevChildKey) {



            Log.e("dataSnapshot KEY", " ==>" + dataSnapshot.getKey());

        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {
        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String prevChildKey) {
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

这里dataSnapshot.getKey()返回它的所有子子。