首页 文章

在Firebase中过滤查询

提问于
浏览
0

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

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

    可以通过多种方式实现这一目标 . 其中一项在以下完成 -

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

    我希望这有帮助 ....

相关问题