Получить данные из firebase с определенной позиции

Hy, я пишу приложение, которое должно получать определенные данные из firebase, используя позицию элемента в listView. Моя проблема в том, что я понятия не имею, как взять этот предмет на firebase.

Получить данные из firebase с определенной позиции

Для всех дочерних элементов Torneo я должен контролировать все nameCreator. Я пробовал это:

public Boolean RegisterUser(Data data, final int position, final Context c){
        boolean registration;
        final ArrayList<String> Creator = new ArrayList<>();



        databaseReference.orderByChild("Tornei").equalTo(Integer.toString(position)).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot datas: dataSnapshot.getChildren()){
                   Creator.add(data.child("nameCreator").getValue().toString());
                }
            }
            @Override
            public void onCancelled(DatabaseError databaseError) {
            }
        });
        if (Creator.equals(data.getNameCreator())){
            registration = false;
        }else{
            registration = true;
        }

        return registration;
    }

Данные — это класс с некоторыми геттерами и сеттерами, которые я создал. position — это позиция элемента в представлении списка.

Спасибо за ответы.

что у тебя в списке?

Peter Haddad 20.04.2019 13:45

Кнопка для выбора конкретного элемента

Gioele.sandrin 20.04.2019 13:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
662
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Измените следующее:

databaseReference.orderByChild("Tornei").equalTo(Integer.toString(position)).addListenerForSingleValueEvent(new ValueEventListener() {

в это:

databaseReference.child("Tornei").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot datas: dataSnapshot.getChildren()){
               Creator.add(datas.child("nameCreator").getValue().toString());
    if (Creator.equals(data.getNameCreator())){
        registration = false;
    }else{
        registration = true;
    }
            }
        }
        @Override
        public void onCancelled(DatabaseError databaseError) {
        }
    });

Затем вы сможете зациклиться и получить значение nameCreator

Не работает, мне говорит java.lang.String java.lang.Object.toString()

Gioele.sandrin 20.04.2019 13:52

измените это Creator.add(datas.child("nameCreator").getValue().toString()‌​); на следующее также Creator.add(datas.child("nameCreator").getValue(String.class‌​));

Peter Haddad 20.04.2019 13:53

Также я удалил toString перед addListenerForSingleValueEvent, как написано в ответе

Peter Haddad 20.04.2019 13:54

Это возвращает меня Всегда правда. Первое nameCreator не совпадает с именем, которое у меня есть вставка

Gioele.sandrin 20.04.2019 13:55

Теперь возвращайте всегда false

Gioele.sandrin 20.04.2019 14:02

Это просто.

【Шаг 1 | Получите данные снимка и сохраните их в глобальной переменной】

DatabaseReference rootReference = FirebaseDatabase.getInstance().getReference();
DatabaseReference fruitsReference = rootReference.child("fruits");

DataSnapshot fruitsData;

@Override
protected void onStart() {
    super.onStart();

    fruitsReference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshots) {
            fruitsData = dataSnapshots;        
        }

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

【Шаг 2 | Найдите свою целевую позицию в цикле】

public void onClick(View view) {
    int index = 0;

    for (DataSnapshot childSnapshot : fruitsData.getChildren()) {
        if (index == 1) {        //your target position
            DatabaseReference currentFruitReference = childSnapshot.getRef();

            currentFruitReference.setValue("peach");        //do whatever you want
        }

        index++;
    }
}

Другие вопросы по теме