¿Cómo usar la consulta de Firebase equalTo (value, key)?
Como novato en firebase intenté imitar una especie de "where clause" para recuperar la cartera del usuario en este sencillo caso de uso:
User 48bde8f8-3b66-40bc-b988-566ccc77335c email: "[email protected]" username: "userTest1" UserWallet F4PvtvNT2Z coins: 26 someList elemet1 elemet2 user: "48bde8f8-3b66-40bc-b988-566ccc77335c"
Primero intenté codificar mi solicitud de la siguiente manera:
- Cómo rellenar Spinner con ArrayList en Android
- Utilizar GSON para analizar el objeto json vs json array
- Error: Error de ejecución para la tarea ': app: shrinkReleaseMultiDexComponents'
- Cómo contar la velocidad basada en pasos
- ¿Podemos usar CSS en formularios Android para los componentes de Android?
Firebase root = new Firebase("https://myApp.firebaseio.com/"); Firebase ref = root.child("UserWallet"); Query query = ref.equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");
El resultado fue nulo, así que escribí esta consulta:
Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c", "user");
El resultado fue nulo de nuevo. La única manera de recuperar la cartera era con esta consulta:
Query query = ref.orderByChild("user").equalTo("48bde8f8-3b66-40bc-b988-566ccc77335c");
Entonces, ¿Debo tener que usar siempre la consulta "orderByChild ()" antes de usar "equalTo ()"?
Y por lo tanto, ¿cuál es el propósito de la consulta "equalTo (String value, String key)" compara a "equalTo (String value) ya que sólo el segundo funciona correctamente?
- Android no puede abrir mi aplicación
- JSON a clase Java
- Varias versiones de la misma biblioteca
- Pase y reciba el objeto JSON de Jersey Resftul webservice desde android
- Cómo establecer el idioma predeterminado para la aplicación de Android?
- Crash Una aplicación que utiliza excepción en Android
- ¿Puede Android MediaPlayer reproducir audio en un archivo comprimido?
- ¿Cómo establecer programaticamente tiempo detectable sin confirmación de usuario?
Hay algunos casos de borde que no necesitan un orderBy...()
, pero en general se necesita un orderBy...()
antes de una operación de filtrado ( equalTo()
, startAt()
, endAt()
).
Le recomiendo que primero lea la guía de programación Firebase para Android (95% de ella se aplica a Java regular también). Unas horas pasadas en esa guía, ahorrarán docenas de preguntas aquí. Por ejemplo: esta es la sección sobre consultas .
Después de leer esto, también puede leer esta guía sobre NoSQL Data Modeling . Cubre muchos patrones comunes en el modelado de datos NoSQL y le ayudará a darse cuenta temprano de que tratar de asignar consultas SQL a una base de datos NoSQL es una idea lógica, pero rara vez es buena.
Mi inicial (sin ninguna idea en sus casos de uso, a excepción de "Necesito poder encontrar las carpetas para un usuario") modelo:
UserWallet "48bde8f8-3b66-40bc-b988-566ccc77335c" "F4PvtvNT2Z" coins: 26 someList element1 element2
En el modelo anterior, he invertido la Wallet
y el User
en UserWallet
, de modo que buscar la cartera (s) para un usuario se vuelve más fácil.
ref.child('UserWallet').child(auth.uid).addValueEventListener(...
Tenga en cuenta que no hay ninguna consulta involucrada aquí, por lo que la carga será igualmente rápida, no importa cuántos usuarios tiene en su base de datos.
O alternativamente:
User "48bde8f8-3b66-40bc-b988-566ccc77335c" email: "[email protected]" username: "userTest1" Wallet "F4PvtvNT2Z" coins: 26 someList element1 element2 UserWallet "48bde8f8-3b66-40bc-b988-566ccc77335c" "F4PvtvNT2Z"
Ahora hemos terminado de aplanar la estructura. Para determinar las carteras de un usuario, vaya a UserWaller/$uid
y luego cargue cada cartera de Wallets/$walletid
. Puede ser un poco más código, pero será extremadamente eficiente (ya que no hay consultas involucradas).
Puede utilizar la consulta anidada para esto. Si usted tiene identificación aleatoria múltiple usted puede compararlos fácilmente.! Referencia de base de datos = FirebaseDatabase.getInstance (). GetReference ();
Query query = reference.child("user"); query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { // dataSnapshot is the "issue" node with all children with id 0 for (DataSnapshot issue : dataSnapshot.getChildren()) { // do something with the individual "issues" Query query = reference.child("user").child(dataSnapshot.getKey().equals(YourData))); query.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { if (dataSnapshot.exists()) { } } } @Override public void onCancelled(DatabaseError databaseError) { } });
- Problema de memoria de mapa de bits de Android – Error: falta de memoria en una asignación de 8294416 bytes
- ¿Cómo acceder a los datos RAW de Android Heart Rate Sensor? (Luz reflejada, no el latido del corazón)