Retrieving data from Firebase Realtime Database in Android

Erick Medina

I'm new to Firebase and NoSQL. I have an Android Demo, with a City Autocomplete Text Field in which I want to populate the cities I have from my Firebase DB, while typing.

{   "cities":{
        "Guayaquil":true,
        "Gualaceo":true,
        "Quito":true,
        "Quevedo":true,
        "Cuenca":true,
        "Loja":true,
        "Ibarra":true,
        "Manta":true
    }
}

This is what I have so far.

How can I retrieve from the DB cities that start with a letter (input from keyboard)? If I start typing "G", I want to receive "Guayaquil" and "Gualaceo".

If I use orderByValue always returns an empty snapshot.

If I use orderByKey return the whole list.

    Query citiesQuery = databaseRef.child("cities").startAt(input).orderByValue();
    citiesQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> cities = new ArrayList<String>();
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                cities.add(postSnapshot.getValue().toString());
            }

Note: If you can recommend a better data structure, you're welcome.

Frank van Puffelen

@NicholasChen has identified the problem. But here's the way you'd implement using the 3.x SDK:

DatabaseReference cities = databaseRef.child("cities")
Query citiesQuery = cities.orderByKey().startAt(input).endAt(input+"\uf8ff");
citiesQuery.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> cities = new ArrayList<String>();
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
            cities.add(postSnapshot.getValue().toString());
        }

By starting at the user input and ending at the last string that starts with the user input, you get all matching items

For relatively short lists of items Ryan's approach will also work fine. But the above Firebase query will filter server-side.

Update

I just ran this code:

    DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReference("39714936");

    String input = "G";

    DatabaseReference cities = databaseRef.child("cities");
    Query citiesQuery = cities.orderByKey().startAt(input).endAt(input + "\uf8ff");
    citiesQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            List<String> cities = new ArrayList<String>();

            for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
                cities.add(postSnapshot.getValue().toString());
            }
            System.out.println(cities);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

And it printed:

true

true

So clearly matches two cities.

Feel free to test against my database: https://stackoverflow.firebaseio.com/39714936

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

Firebase realtime database does not retrieving data in release apk [Android]

Retrieving JSON data from realtime database (firebase) showing nothing

Retrieving data from Firebase (Realtime Database) into a list (Kotlin)

retrieving data from firebase database android

Retrieving Friends from Firebase realtime database

Retrieving Image from Firebase Realtime database

Retrieving data from Realtime Database only once

Data not retrieving from Firebase database

Data is not retrieving from Firebase database

Unable to show random data from Firebase Realtime Database in Android

Getting Data from Firebase realtime database, Android Studio, Java

How to get the last data from realtime database of firebase in Android

Firebase Realtime Database Adding/Removing/Updating/Retrieving Data

Firebase Realtime Database Only Retrieving data with User's ID

android recycler view retrieving data from firebase database

retrieving data from firebase android

Retrieving data from firebase Realtime Datbase with SwiftUI Xcode 11

Firebase Realtime Database Update Data - Android Java

Firebase Realtime Database Internal Data Representation for Android

Firebase Realtime Database - retrieve data Android Studio

Retrieving integer datatype from firebase realtime to Android textview

Display data from Firebase Realtime Database

Retrieve child data from firebase realtime database

Deleting user data from Firebase realtime database

Displaying Data from Firebase Realtime Database

Streaming data from Firebase Realtime Database

How to read data from the Firebase realtime database

Retrieve a single data from Firebase Realtime Database

How to retrieve data from realtime database in Firebase?