我正在使用Google Firebase存储来自Android Wear的用户心跳数据库。
现在,我正在尝试检索子级“ tmpHR”的心跳值,但该值一直显示为空。

这是我的数据库的结构:

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”),并且我已经成功检索了该值。由于我添加了另一个孩子(字符串日期),因此tmpHR的值始终返回null。

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

最佳答案

请尝试以下操作:

 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

关于java - Firebase-在唯一键下获取子值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50349778/

10-12 00:16