我如何从这样的数据库中检索数据?

时间:2017-10-05 11:27:35

标签: java firebase firebase-realtime-database

我想检索值和时间,但我无法到达那里,它一直在日志中给我一个null值。我想知道是否有必要获得unique_id,如果是,我该怎么办呢。

Screenshot of Realtime Database

valueRef = myRef.child("user_id").child("ASSETS").child("cash at bank");

view.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        valueRef.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                for (DataSnapshot ds : dataSnapshot.getChildren()) {
                    Long value = ds.child("values").getValue(Long.class);
                    Log.d(TAG, "onChildAdded: the value is" + value);
                }
            }

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

            }
        });
    }
});

2 个答案:

答案 0 :(得分:1)

我认为这将是解决问题的正确方法:

@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
    Long value = ds.child("values").getValue(Long.class);
}

在您的参考文献中,您已经在查看具有唯一ID且获得DataSnapshot的新孩子。你所要做的就是引用它的孩子,即values,并获得它的价值。

答案 1 :(得分:0)

Tal Barderhis answer一致。

虽然还有另一种方式:

valueRef = myRef.child("user_id").child("ASSETS").child("cash at bank");

view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            valueRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChanged(DataSnapshot dataSnapshot, String s) {
                    for (DataSnapshot ds : dataSnapshot.getChildren()) {
                        Long value = ds.child("values").getValue(Long.class);
                        Log.d(TAG, "onChildAdded: the value is" + value);
                    }
                }

                ...
        }
    });

这仍然使用你的循环,我只是将监听器更改为ValueEventListener,它将返回包含所有孩子的DataSnapshot

Tal's answer中提到的那个应该是大多数情况下采用的方法。