Фильтр запроса в Firebase - PullRequest
0 голосов
/ 05 июля 2018

В моем приложении есть фрагмент, который позволяет пользователю выполнять фильтрованный поиск стран, которые он хочет видеть. Это выглядит так (пользователь выбирает континенты стран, которые он хочет видеть, а затем появляются все страны этих континентов):

enter image description here

Я использую Firebase Realtime database, чтобы сохранить все страны с их названиями и изображениями каждой страны. Вот как выглядит мое дерево JSON (здесь показаны не все страны): (Кстати, извините, потому что все по-португальски):

enter image description here

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

 DatabaseReference paisNomeContinentes = mDatabase.child("continentes").child(Constants.PAISES_EUROPA).child("Paises");             // C1 - ÁFRIA        (Constants.PAISES_AFRICA)
    ValueEventListener valueEventListener1 = new ValueEventListener() {                                                          // C2 - ÁSIA         (Constants.PAISES_ASIA)
        @Override                                                                                                               // C3 - ANTÁRTIDA    (Constants.PAISES_ANTARTIDA)
        public void onDataChange(DataSnapshot dataSnapshot) {                                                                   // C4 - AMÉRICA      (Constants.PAISES_AMERICA)
            List<String> nomePaisList = new ArrayList<>();                                                                     // C5 - EUROPA       (Constants.PAISES_EUROPA)
                                                                                                                               // C6 - OCEANIA      (Constants.PAISES_OCEANIA)
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String nomePais = ds.child("Nome").getValue(String.class);
                nomePaisList.add(nomePais);
            }

            int urlCount = nomePaisList.size();
            int randomNumber = new Random().nextInt(urlCount);
            List<String> randomNomePaisList = new ArrayList<>();
            for (int i=0; i<=9; i++) {
                randomNomePaisList.add(nomePaisList.get(randomNumber));
                txtHomeDesc.setText(randomNomePaisList.get(i)); // Inserir na TextView o nome do respetivo país
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    paisNomeContinentes.addListenerForSingleValueEvent(valueEventListener1);

Как я могу получить все страны континентов, которые выбрал пользователь?

1 Ответ

0 голосов
/ 05 июля 2018

Для этого могут быть разные способы. Один из них сделан ниже-

String nomePais;
String nome;
List<String> nomePaisList;
DatabaseReference paisNomeContinentes = mDatabase.child("Continente").child(Constants.PAISES_EUROPA).child("Paises");             // C1 - ÁFRIA        (Constants.PAISES_AFRICA)
    ValueEventListener valueEventListener1 = new ValueEventListener() {                                                          // C2 - ÁSIA         (Constants.PAISES_ASIA)
        @Override                                                                                                               // C3 - ANTÁRTIDA    (Constants.PAISES_ANTARTIDA)
        public void onDataChange(DataSnapshot dataSnapshot) {                                                                   // C4 - AMÉRICA      (Constants.PAISES_AMERICA)
                                                                               // C5 - EUROPA       (Constants.PAISES_EUROPA)
                                                                                                                               // C6 - OCEANIA      (Constants.PAISES_OCEANIA)
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                nomePais = ds.child("Continente").getValue(String.class);
                if(nomePais.equals("AMERICA") || nomePais.equals("EUROPIA") {
                    nome = nomePais;
                    fetch(nome);
                 } // Suppose user selects continent AMERICA & EUROPIA
            }

void fetch(String n) {
   Query paisNome = mDatabase.child("continentes").child(Constants.PAISES_EUROPA).child("Paises").child("P;             1").child("Nome").equalTo(n);
   ValueEventListener valueEventListener1 = new ValueEventListener() {                                                          
    @Override                                                                                                               
    public void onDataChange(DataSnapshot dataSnapshot) {                                                                   
        nomePaisList = new ArrayList<>();                                                                     
        nome = dataSnapshots.getValue().toString();
        nomePaisList.add(nome);

    }
}

Надеюсь, это поможет ....

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