Как получить данные из FireBase, используя запрос в соответствии со значением? - PullRequest
0 голосов
/ 05 июня 2019

Я хочу получать данные из firebase в соответствии с категорией, категория является динамической. Пользователь может выбрать категорию из списка, которые определены. Есть одна категория, это имя ВСЕ, моя цель, когда пользователь выбирает ВСЕ, затем должен извлечь все данные, я могу прочитать данные, которые имеют категорию, но я не знаю, как читать данные, которые не имеет категорию.


usuarios.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot usuarios : dataSnapshot.getChildren()) {

                    DatabaseReference user = usuarios.getRef();
                    String eventUserOwnerKey = user.getKey();



                    //Al elegir la opción all, se quitara todos los filtros y se mostrara todos los eventos


                    if (value!="ALL") {
                        System.out.println("ALALALALALALALALALALALALALALALAL");
                        Query eventos = usuarios.getRef().child("eventos").orderByChild("categoria").equalTo(value);


                        //Aqui compruebo si el adaptado tiene valor o no.
                        //En caso de que tenga, entonces que vacie para que cada que se ejecute la consulta con
                        //Diferente categoria, se vaya vaciando los resultados anteriores

                        if (adapter != null) {
                            adapter.clear();
                        }

                        eventos.addListenerForSingleValueEvent(new ValueEventListener() {
                            @Override
                            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                                for (DataSnapshot eventos : dataSnapshot.getChildren()) {

                                    //Recupero el objeto Evento des de la base de datos
                                    Evento evento = eventos.getValue(Evento.class);
                                    resultradoEventos.add(evento);//Guardo en el arraylist los eventos recuperados.
                                    lvEventos = view.findViewById(R.id.lvEventos);

                                    if (getContext() != null) {
                                        adapter = new EventpAdapter(getContext(), R.layout.layout_evento, resultradoEventos);
                                        lvEventos.setAdapter(adapter);

                                        lvEventos.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                            @Override
                                            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                                                Evento evento = (Evento) parent.getItemAtPosition(position);
                                                Intent i = new Intent(mContext, DetailEvento.class);
                                                i.putExtra("evento", evento);
                                                i.putExtra("eventUserOwnerKey", eventUserOwnerKey);
                                                startActivity(i);
                                            }
                                        });
                                    }


                                }
                            }

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

                            }
                        });
                    }else if (value=="ALL"){
                        System.out.println("HOLALALALALALALALALAL");


                    }
                }

Вот мои данные

"usuarios" : {
    "QnUqKgJfq2XxDYcsvp4YnJ2YFhn1" : {
      "eventos" : {
        "-LgIlXbocvzN3ZpbwuFR" : {
          "caducidad" : "15",
          "categoria" : "DAM",
          "descripcion" : "mac",
          "horaDelEvento" : "mac",
          "imagenUrl" : "https://firebasestorage.googleapis.com/v0/b/english-app-b2170.appspot.com/o/Uploads%2F538138937?alt=media&token=7d77c944-2037-43a1-ab2b-871ba3068966",
          "sitioDelEvento" : "mac",
          "titol" : "mac"
        },
        "-LgIljoH-AsRchkQ4xbw" : {
          "caducidad" : "67989",
          "categoria" : "DAM",
          "descripcion" : "nadim",
          "horaDelEvento" : "nadim",
          "imagenUrl" : "https://firebasestorage.googleapis.com/v0/b/english-app-b2170.appspot.com/o/Uploads%2F538138937?alt=media&token=7d77c944-2037-43a1-ab2b-871ba3068966",
          "sitioDelEvento" : "nadim",
          "titol" : "nadim"
        }
      }
    },
    "UvTCjIYMA0btE14QHz7twbdN7zT2" : {
      "eventos" : {
        "-LdPfYoRre18oGpd3Oda" : {
          "caducidad" : "2019-04-26",
          "categoria" : "SMIX",
          "descripcion" : "Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the",
          "horaDelEvento" : "12:12",
          "imagenUrl" : "https://firebasestorage.googleapis.com/v0/b/english-app-b2170.appspot.com/o/usuarios%2FUvTCjIYMA0btE14QHz7twbdN7zT2%2Fimagenes%2Fpexels-photo-160107.jpeg?alt=media&token=f0b7b573-8ca4-4fd2-a5e4-da43b967ff4b",
          "sitioDelEvento" : "Aula 33",
          "titol" : "Lorem Ipsum"
        }
      }
    },
    "hzqvjnkTdJcyTOPUcEMrAmvEXUo1" : {
      "eventos" : {
        "-LfofwABcBVf_ID29Iye" : {
          "caducidad" : "12",
          "categoria" : "SMIX",
          "descripcion" : "Fifa",
          "horaDelEvento" : "2",
          "imagenUrl" : "https://firebasestorage.googleapis.com/v0/b/english-app-b2170.appspot.com/o/Uploads%2F35034?alt=media&token=382a36d6-f12a-4d9b-b67e-0e61e21a77fc",
          "sitioDelEvento" : "Fif",
          "titol" : "Fifaaa"
        }
      }
    },
    "pzgsylJZenYmOAUytReg1TSDNv82" : {
      "eventos" : {
        "-LgWUjpk8m4YHUHc4mQj" : {
          "caducidad" : "2019-06-04",
          "categoria" : "DAM",
          "descripcion" : "Trial",
          "horaDelEvento" : "15:00",
          "imagenUrl" : "https://firebasestorage.googleapis.com/v0/b/english-app-b2170.appspot.com/o/usuarios%2FpzgsylJZenYmOAUytReg1TSDNv82%2Fimagenes%2Fmacbook-apple-imac-computer-39284.jpeg?alt=media&token=cb0c0c1d-dd8a-422c-82da-f8bc9ba30e0c",
          "sitioDelEvento" : "Aula:73",
          "titol" : "Trial Today"
        }
      }
    }
  }

Вот мои категории

"categorias" : {
    "-Lg3sBVLlFv5dnIkqh2t" : {
      "titiolCategoria" : "SMIX"
    },
    "-Lg3t1hokeFkrj2SpgDH" : {
      "titiolCategoria" : "DAM"
    },
    "-LgIaTyAnU_GbHMQLn1I" : {
      "titiolCategoria" : "ALL"
    },
    "-LgWcNmZqpG6tHNCmXgA" : {
      "titiolCategoria" : "AFI"
    }
  },

Я хочу показывать данные по категориям, если пользователь выбирает категорию ВСЕ, то он должен показать, что все данные доступны. Иначе, это должно показать данные, которые выбрана категория.

1 Ответ

0 голосов
/ 05 июня 2019

Похоже, у вас есть два случая:

  1. Если значение ALL, вы хотите прочитать всех пользователей.
  2. Если значение не ALL, вытолько хотят читать пользователей, которые имеют эту категорию.

Я бы реализовал это так:

Query eventos = usuarios.getRef().child("eventos");

if (!value.equals("ALL")) {
    eventos = eventos.orderByChild("categoria").equalTo(value);
}

eventos.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot eventos : dataSnapshot.getChildren()) {

            ...

        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        throw databaseError.toException(); // never ignore errors
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...