Получить дочерние узлы родительского узла и выполнить метод для каждого значения - PullRequest
0 голосов
/ 04 октября 2018

Я создаю приложение, которое должно извлечь все дочерние элементы из определенного родительского узла и хотело бы выполнить вызов метода для каждого полученного дочернего элемента.

Вот моя текущая база данных:

Нажмите меня

Я хотел бы назвать всех дочерних элементов 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 голосов
/ 04 октября 2018

Чтобы решить эту проблему, вам нужно изменить объявление вашего getCurrentLocation() метода с:

public void getCurrentLocation(){}

на

public void getCurrentLocation(String childuser){}

Теперь вам нужно вызывать этот метод изнутриonDataChange() метод, подобный следующему:

getCurrentLocation(childuser);

Видите, я передал childuser в качестве аргумента getCurrentLocation(), чтобы его можно было использовать надлежащим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...