繁体   English   中英

从Firebase数据库检索某些节点为null的数据

[英]retrieve some data from the firebase database with some nodes being null

在此处输入图片说明

cBankRef=myRef.child("user_id").child("ASSETS");


 cBankRef.addChildEventListener(new ChildEventListener() {
                    @Override
                    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

                        String value = dataSnapshot.child("1").child("description").getValue(String.class);
                        Log.d(TAG, "onChildAdded: the value is"+value);


                        if(dataSnapshot.child("2").exists()) {
                            String valuess = dataSnapshot.child("3").child("description").getValue(String.class);
                            Log.d(TAG, "onChildAdded: the value is: " + valuess);

                        }
                        if (dataSnapshot.child("3").exists()) {
                            String values = dataSnapshot.child("1").child("description").getValue(String.class);
                            Log.d(TAG, "onChildAdded: the cash at bank is: "+values);
                        }

                        }



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

                    }
                });

首先,我访问了user_id子级和ASSETS,然后通过节点(“ 1”),(“ 2”),我不得不添加其他节点以获取值,((“ 1”)和(“ 2”) (“” Cash at Bank“)(” stock“)开头,但我决定将其更改为数字,但给出的空@makrand pawar

您的示例中有多个问题:

  • 您的cBankRef指向\\user_id\\ASSETS\\Cash at bank\\stock\\Cash in Hand不存在(在ASSETS下不存在Cash at bank结点Cash at bank )。
  • 然后,您将一个ChildEventListener附加到此引用,该引用将不返回任何值,因为它下没有任何子对象(因为它不存在)。
  • onChildAdded()内部,您尝试访问在您的示例中也不存在的houses节点(尽管house确实存在)。

要访问“ Stock节点下的子代,您将需要以下内容:

ref = FirebaseDatabase.getInstance().getReference().child("user_id").child("ASSETS").child("Stock");

ref.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        String value = dataSnapshot.child("house").child("values").getValue(String.class);
        Log.d(TAG, "onChildAdded: the value is: "+value);
    }
    // ...
});

DatabaseReference#child()方法不是 SELECT语句。 要访问节点下的所有内容,只需创建对所需最高节点的引用,然后将侦听器附加到该引用即可。

例如,如果您需要访问ASSETS节点下的所有内容,则可以在其中附加一个侦听器:

ref = FirebaseDatabase.getInstance().getReference().child("user_id").child("ASSETS");

ref.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String value = dataSnapshot.child("Stock").child("house").child("values").getValue(String.class);
        Log.d(TAG, "onChildAdded: the value is: "+value);

        if (dataSnapshot.child("Cash at bank").exists()) {
            String value = dataSnapshot.child("Cash at bank").getValue(String.class);
            Log.d(TAG, "onChildAdded: the cash at bank is: "+value);
        }
    }
    // ...
});

然后,当侦听器返回时,您可以使用DataSnapshot#child()来访问从该位置检索的单个值。 另外,使用DataSnapshot#exists()是在使用节点之前检查节点是否存在的简单方法。

如果您计划在ASSETS下具有当前不存在的其他值或节点,则上述侦听器将在创建它们后立即将其返回。

为此,我建议您像这样使用ValueEventListener

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference stockRef = rootRef.child("user_id").child("ASSETS").child("Stock");
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String values = ds.child("house").child("values").getValue(String.class);
            Log.d("TAG", values);
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
stockRef.addListenerForSingleValueEvent(eventListener);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM