我正在构建一个需要从某个父节点检索所有子节点的应用程序,并且希望对检索到的每个子节点执行方法调用。
这是我当前的数据库:
我想调用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) {}
});
}
请帮助我:)预先感谢:)
答案 0 :(得分:0)
要解决此问题,您需要从以下位置更改getCurrentLocation()
方法的声明:
public void getCurrentLocation(){}
到
public void getCurrentLocation(String childuser){}
现在,您需要像这样从onDataChange()
方法内部调用此方法:
getCurrentLocation(childuser);
看,我已经将childuser
作为参数传递给getCurrentLocation()
,以便可以正确使用它。