Android – Iniciar la consulta de base de datos de Firebase no funciona como se esperaba
Estoy desarrollando una aplicación para Android que utiliza Firebase como backend. Soy nuevo en Firebase y atascado en un problema, bien el problema es cuando intento buscar un expediente usando la consulta del startAt
, devuelve los resultados que no comienza con la palabra clave que entre.
Aquí está el conjunto de datos
- Cómo buscar un valor en firebase Android
- La transacción de Firebase no aborta remotamente si previamente se ha comprometido localmente
- Cómo se inicializa la notificación de fallos de Firebase
- React-native lento en Android 5.1.1 pero grande en viejo 5.1
- ¿Por qué dos métodos para FirebaseDatabase cliente fuera de línea?
itemname -KK8vI8A5BZZp3Xo3FpA name: "abc" -KK8w3uoJdJ0hBSrq0CS name: "test" -KKAC1o9Vazyg9JLtDoQ name: "dude"
Y aquí está el código snippit
Query query = firebase.child(Constants.KEY_ITEM_NAME).orderByChild("name").startAt("abc"); query.addChildEventListener(new ChildEventListener() { @Override public void onChildAdded(DataSnapshot dataSnapshot, String s) { Iterator<DataSnapshot> i = dataSnapshot.getChildren().iterator(); while (i.hasNext()) { DataSnapshot d = i.next(); LOG(d.getKey(), d.getValue().toString()); } }
Así que cuando busco abc
la respuesta también incluye la test
. Tal vez estoy haciendo algo mal o me voy por el camino equivocado. ¿Podría alguien por favor me señalan en la dirección correcta.
PS Estoy intentando utilizar un AutocompleteTextView
para buscar elementos.
Gracias
- La autenticación de Firebase de Android no funciona
- Audífono de estado de firebase de Android firebase llamado varias veces
- Firebase onChildAdded para nuevos datos
- Firebase en Android - Quiero desactivar las notificaciones de firebase en el cliente de Android
- Base de datos Firebase Permiso denegado con permisos de lectura / escritura establecidos en true
- obtener la versión de android huellas dactilares de certificados
- Cómo hacer la vista de mensaje roscado con enviar y recibir mensajes en dos lados con la vista de reciclador
- Notificación de envío de FCM que muestra el icono cuadrado blanco en lugar del icono de la aplicación cuando la aplicación está en el fondo
Cuando llama a orderByChild("name").startAt("abc")
la base de datos ordena todos los elementos por su propiedad de nombre, omite los anteriores a abc
y luego los devuelve todos.
Si sólo buscas regresar a los niños que coincidan con abc
, utilizarías equalTo()
:
query = firebase.child(Constants.KEY_ITEM_NAME).orderByChild("name").equalTo("abc");
Desafortunadamente no puedes hacer lo que quieres. Supongo que el método que está buscando es startsWith()
y no startAt()
(para coincidir con todas las palabras que comienzan con una subcadena). Este método no se ha implementado todavía en Firebase, demasiado mal.
Usted tiene que utilizar un servicio externo como ElasticSearch, pero eso significaría que debe tener un servidor que es probablemente uno de los motivos que realmente utilizan firebase … De todos modos este es un enlace para la implementación de ElasticSearch:
https://firebase.googleblog.com/2014/01/queries-part-2-advanced-searches-with.html
De lo contrario tendrá que averiguar cómo deshacerse de su barra de búsqueda …
¡Buena suerte!
Trabajó para mí:
Query query = MyApplication.sReferenceOrders.orderByChild(Constants.STATUS).startAt("1").endAt("1\\uf8ff");