Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何循环使用firebase数据库中的数据?_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 如何循环使用firebase数据库中的数据?

Android 如何循环使用firebase数据库中的数据?,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,这是我在Firebase数据库中的JSON数据结构: familylist |- 0 |--children | |-- 0:"FGH" | |-- 1:"HJU" |-- code: "2222" |-- family: "SWE" |-- fatherName: "ABC" |-- motherName: "XYZ" 问题是我必须循环我的整个循环。因此,我无法将数据库引用值硬编码为0,1,。。每次我检查用户输入的代码是否与此

这是我在Firebase数据库中的JSON数据结构:

familylist
 |- 0
    |--children
    |   |-- 0:"FGH"
    |   |-- 1:"HJU"
    |-- code: "2222"
    |-- family: "SWE"
    |-- fatherName: "ABC"
    |-- motherName: "XYZ"
问题是我必须循环我的整个循环。因此,我无法将数据库引用值硬编码为0,1,。。每次我检查用户输入的代码是否与此代码字段匹配时,都会执行etc。 例如:

 familyListReference = firebaseDatabase.getReference("familylist/0/family");
使用下面的代码,我能够从特定位置获得单个值。但是,我如何更改代码,以便在循环中遍历,并获得我想要获取的任何数据呢

// Read from Database
familyListReference.addValueEventListener(new ValueEventListener() {
  @Override
  public void onDataChange(DataSnapshot dataSnapshot) {
    String familyName = (String) dataSnapshot.getValue();
    Log.d(TAG, "Family name is: " + familyName);
  }
  @Override
  public void onCancelled(DatabaseError databaseError) {
    Log.d(TAG, "Read failed");
  }
});
请使用此代码:

DatabaseReference familyListReference = FirebaseDatabase.getInstance().getReference().child("familylist");
familyListReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String key = (String) ds.getKey();

            DatabaseReference keyReference = FirebaseDatabase.getInstance().getReference().child("familylist").child(key);
            keyReference.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    String code = dataSnapshot.child("code").getValue(String.class);
                    String family = dataSnapshot.child("family").getValue(String.class);
                    String fatherName = dataSnapshot.child("fatherName").getValue(String.class);
                    String motherName = dataSnapshot.child("motherName").getValue(String.class);
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                    Log.d(TAG, "Read failed");
                }
            });

        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.d(TAG, "Read failed");
    }
});

希望有帮助。

没用。它只到达这里!家庭列表参考:https://bcm.firebaseio.com/familylist 当我在LogCat中记录输出时。我必须手动写入0,以获取特定0位置的值。有什么方法可以通过编程来实现吗?它也没有进入for循环。不知道为什么!请参阅我更新的代码,其中我假设familylist节点是根节点之后的第一个子节点。对吗?没错。根->家庭列表->0-->所有其他字段。这就是流程。新数据库引用仍然不起作用吗?现在的错误是什么?是的。还是不行!家庭列表参考:https://bcm.firebaseio.com/familylist 这是一个新的参考相同。应该是https://bcm.firebaseio.com/familylist/0 正当我如何通过编程实现这一点?