Хобрук: Ваш путь к мастерству в программировании

фильтровать дочерние данные в firebase

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

Вот как я заполняю представление ресайклера: Как можно Я получаю данные из Firebase в свой адаптер

моя структура базы данных

Но в зависимости от того, в какой стране находится пользователь, мне нужно фильтровать сообщения, относящиеся только к его стране.

В структуре базы данных мне нужно отфильтровать TO, FROM, PASSING, REQUEST FROM. Потому что в этих параметрах я указываю код страны, поэтому я могу отфильтровать только страну, в которой находится пользователь.

Могу ли я просто добавить это в запрос, и смогу ли я получить другую информацию от ребенка, чтобы я мог отображать ее в сообщении, когда пользователь нажимает на сообщение в recyclerview.

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();             Query query = rootRef.child("Trading info").orderbyChild("TO location").equals(USA);

Итак, если дочерний элемент содержит USA, он будет показан в сообщении, и когда пользователь нажмет на сообщение, смогу ли я получить все данные, как обычно.

Извините, если не лучше объяснил. Я хочу знать, смогу ли я получить все остальные дочерние узлы из отфильтрованных дочерних узлов. Чтобы получить узлы из дочернего узла, который содержит США в своих дочерних узлах.


И могу использовать несколько запросов, потому что мне нужно проверить FROM, PASSING, TO и REQUEST FROM дочерние узлы местоположения, если он содержит код страны, который мне нужен.


  • Итак, ваш вопрос: работает ли этот запрос? 14.11.2019
  • да, stackoverflow.com/questions/32526960/ Это то, что я пытаюсь выполнить, но смогу ли я получить данные из родительского ребенка. Потому что мне нужно проверить .equal в subchild. 14.11.2019
  • Боюсь, я не понял, о чем вы говорите. Приведите конкретный пример. 14.11.2019
  • Я хочу отфильтровать дочерние данные в соответствии с дочерним значением. И когда я его фильтрую, как я могу получить другие дочерние значения, такие как доступность, адрес электронной почты, имя (см. Рисунок выше, моя структура базы данных). Я использую дочерние элементы местоположения FROM, PASSING и TO для postId, чтобы фильтровать данные для отображения сообщений пользователей, связанных с его страной, где он сейчас находится. Так что, если он в MNE, он покажет ему сообщение. Поэтому мне нужен способ получить другие данные для публикации, такие как электронная почта, карта и т. Д. Но когда я говорю Query искать путь, он не может вернуться, поэтому он будет читать только для .equal, но не может получить мне другие данные . 14.11.2019
  • @IgorLerinc ты попробовал ответить? 15.11.2019
  • спасибо за помощь, это помогло мне понять, как я могу это сделать. Но проблема с вашим ответом заключается в том, что моему приложению нужно прослушивать 3 дочерних элемента (в торговой информации). Я имею в виду, что если местоположение TO не содержит USA, тогда проверьте узел местоположения FROM, если он содержит USA, если местоположение FROM не содержит USA, затем проверьте местоположение PASSING, если оно содержит значение USA. И в волонтерских службах это происходит так же, проверьте, есть ли из местоположения FROM США, если нет, то проверьте REQUEST FROM, если оно содержит США. Именно этого я и пытаюсь достичь, например, if, else. 15.11.2019
  • И я не знаю, как сделать это заявление, чтобы проверить значение в нескольких полях. Я не знаю, следует ли мне использовать запросы multipme или как это сделать. Я читал, что firebase не поддерживает несколько запросов одновременно. Итак, я не знаю, как сделать это заявление, которое я объяснил. 15.11.2019

Ответы:


1

Чтобы получить email, name и availability, попробуйте следующее:

DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Trading info");
databaseReference.orderbyChild("TO location").equals("USA").addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
         for(DataSnapshot ds : dataSnapshot.getChildren()){
           String fromLocation    = ds.child("FROM location").getValue(String.class);
           String passingLocation = ds.child("PASSING location").getValue(String.class);

              DatabaseReference voluneterService = FirebaseDatabase.getInstance().getReference("Volunteer services");
              voluneterService.orderbyChild("FROM location").equals(fromLocation).addValueEventListener(new ValueEventListener() {
                   @Override
               public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot ds : dataSnapshot.getChildren()){
                        String fromLocation    = ds.child("availability").getValue(String.class);
                        String passingLocation = ds.child("email").getValue(String.class);
                        }
                     }
                    @Override
              public void onCancelled(DatabaseError databaseError) {
                     throw databaseError.toException();
                   }
                });
          }
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

Сначала добавьте ссылку на узел Trading info, затем используйте orderByChild для атрибута TO location и получите FROM location и PASSING location.

Затем добавьте еще одну ссылку на узел Volunteer services и используйте orderByChild для атрибута FROM location. Внутри equalTo() используйте переменную fromLocation, которую вы извлекаете в первом слушателе, тогда вы сможете получить email, name и availibility.

14.11.2019
  • спасибо за помощь, это помогло мне понять, как я могу это сделать. Но проблема с вашим ответом заключается в том, что моему приложению нужно прослушивать 3 дочерних элемента (в торговой информации). Я имею в виду, что если местоположение TO не содержит USA, тогда проверьте узел местоположения FROM, если он содержит USA, если местоположение FROM не содержит USA, затем проверьте местоположение PASSING, если оно содержит значение USA. И в волонтерских службах это происходит так же, проверьте, содержит ли местоположение FROM США, если нет, то проверьте ЗАПРОС ОТ, если он содержит США. Именно этого я и пытаюсь достичь, например, if, else. 15.11.2019
  • потому что в вашем коде это выглядит так: если местоположение TO содержит USA, тогда прочтите два других дочерних элемента, если они содержат то же самое. Но мне нужно поведение, которое я объяснил в комментарии. Завершено ли добавление нескольких методов DatabaseReference для проверки? 15.11.2019
  • и да, я забыл упомянуть, если какой-либо из этих 3 дочерних детей содержит USA (в торговой информации) или в волонтерских службах, если эти 2 дочерних ребенка содержат USA; затем получить доступность, дату поездки, описание, адрес электронной почты, карту, способ поездки, имя, телефон, запланированное время прибытия в место, дату публикации, заголовок. Это полностью то, что я пытаюсь реализовать. 15.11.2019
  • Просто в первом слушателе извлеките все значения, затем добавьте запрос и проверьте, не является ли он нулевым, и прикрепите слушателя 15.11.2019
  • И один побочный вопрос: firebase будет знать, что нужно извлекать данные из другого дочернего элемента, где USA находится в дочернем элементе? Я имею в виду, что если он обнаружил в дочернем элементе postId, что дочерний элемент postId содержит USA (местоположение TO содержит USA), он получит другие дочерние элементы (например, title, name и т. Д.) Из того же дочернего элемента postId. Потому что я работал над MySQL, и вам нужно делать все вручную там 15.11.2019
  • firebase не похож на mysql, здесь вы можете делать запросы, используя equalTo() и другие запросы: firebase.google.com/docs/reference/android/com/google/firebase/. В первом слушателе в моем ответе извлеките from Location, to location и passing, а затем после получения всех значений .. 15.11.2019
  • выполните Query voluneterService = FirebaseDatabase.getInstance().getReference("Volunteer services").orderbyChild("FROM location").equals(fromLocation) и проверьте, не является ли он нулевым, затем добавьте слушателя и извлеките все значения внутри волонтерских служб, иначе, если он равен нулю, проверьте, равно ли request from значению и добавьте слушателя ... 15.11.2019
  • поэтому в основном извлекайте все в первом слушателе, затем создайте запрос и добавьте if ... else if ... else ... и извлеките все данные во втором слушателе 15.11.2019
  • да спасибо. вы открыли мне глаза, когда сказали, тогда создайте запрос и добавьте if ... else if ... else ... и извлеките все данные во втором слушателе, чтобы я мог все проверить и получить все данные. Tnx снова. 15.11.2019
  • Новые материалы

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

    Обзор: Машинное обучение: классификация
    Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

    Разработка расширений Qlik Sense с qExt
    Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..