检索父节点的子节点,并对每个值执行一个方法

时间:2018-10-04 06:15:49

标签: java android firebase firebase-realtime-database

我正在构建一个需要从某个父节点检索所有子节点的应用程序,并且希望对检索到的每个子节点执行方法调用。

  

这是我当前的数据库:

Click Me

我想调用conradjr的所有子级,并在检索到一个子级(例如“ ranniecardino15”)时,应将其存储到变量中,然后执行方法调用。我该怎么办?

我已经编写了这样的代码,但是方法调用“ getCurrentLocation”仅在检索到的最后一个孩子上执行。

 public void getCurrentChildUser() {
    DatabaseReference getuser = FirebaseDatabase.getInstance().getReference().child("Children");
    getuser.child(user).orderByChild("CurrentLocation").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

            for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                childuser = childSnapshot.getKey();
                if (childuser != null){

                    getCurrentLocation();

                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
}

public void getCurrentLocation(){

    DatabaseReference getuser = FirebaseDatabase.getInstance().getReference().child("Children");
    getuser.child(user).child(childuser).child("CurrentLocation").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            if(dataSnapshot != null){

                currentloc = dataSnapshot.getValue(String.class);
                System.out.println("Current Location: "+currentloc);
                String split[] = currentloc.split(",");
                lat1 = Double.parseDouble(split[0]);
                lng1 = Double.parseDouble(split[1]);
                System.out.println("Current Latitude: "+lat1+" and Current Longitude: "+lng1);
                getSavedLocation();
            }

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });
}

请帮助我:)预先感谢:)

1 个答案:

答案 0 :(得分:0)

要解决此问题,您需要从以下位置更改getCurrentLocation()方法的声明:

public void getCurrentLocation(){}

public void getCurrentLocation(String childuser){}

现在,您需要像这样从onDataChange()方法内部调用此方法:

getCurrentLocation(childuser);

看,我已经将childuser作为参数传递给getCurrentLocation(),以便可以正确使用它。