在Firebase中过滤查询

时间:2018-07-05 10:05:33

标签: java android firebase firebase-realtime-database

在我的应用程序中,我有一个片段,允许用户对要查看的国家/地区进行过滤搜索。 看起来像这样(用户选择要查看的国家/地区的大陆,然后出现这些大陆的所有国家/地区):

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 :(得分:0)

可以有多种方法来实现这一目标。其中一项是在下面完成的-

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);

    }
}

我希望这对您有帮助....