Firebase - 在唯一键下获取子值

时间:2018-05-15 12:06:18

标签: java android firebase firebase-realtime-database

我正在使用Google Firebase存储来自Android Wear的用户心跳数据库。 现在我正在尝试检索子项“tmpHR”上的心跳值,但值仍然显示为null。

这是我的数据库的结构:

I want to retrieve int tmpHR child value under the random key

这是我的代码行:

    Integer hrValue;
     ArrayList<Integer> array1;
    array1 = new ArrayList<>();

DatabaseReference userdatabase = FirebaseDatabase.getInstance().getReference().child("Users");
 DatabaseReference ref = userdatabase.child(user.getUid()).child("hrvalue").child("nilaihr");`

`ref.addChildEventListener(new ChildEventListener() {`

            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                for (DataSnapshot uniqueKeySnapshot : dataSnapshot.getChildren()) {
                    //Loop 1 to go through all the child nodes of nilaihr
                    //store random key in uniqueKeySnapshot
                        Integer hrValue = uniqueKeySnapshot.child("tmpHR").getValue(Integer.class);
                        // random key -> child tmpHR -> store in Integer hrValue
                        Log.i("heart rate value", "hrvalue " + hrValue);
                       showData(dataSnapshot);
                       }

            }


            @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) {

            }
        });

    }

    private void showData(DataSnapshot dataSnapshot) {array1.add(hrValue);}

这是logcat:

05-15 19:01:55.824 27624-27624/com.example.amiramaulina.retrievedataheartbeat I/database array: array database [null, null, null,....., null]
05-15 19:01:55.824 27624-27624/com.example.amiramaulina.retrievedataheartbeat I/heart rate value: hrvalue null

之前,随机密钥下只有一个子节点(整数“tmpHR”),并且我已成功检索该值。由于我添加了另一个子节点(String Date),tmpHR的值继续返回null。

任何解决方案都将不胜感激。 谢谢!

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

 ref.addChildEventListener(new ChildEventListener() {

        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {   
                    Integer hrValue = dataSnapshot.child("tmpHR").getValue(Integer.class);
                   showData(dataSnapshot);
           }



        @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) {

        }
    });

删除for循环,因为在这种情况下你不需要循环以便能够检索tmpHR