Recuperando datos de Firebase Realtime Database en Android

Soy nuevo en Firebase y NoSQL. Tengo una demostración de Android, con un campo de texto de autocompletado de ciudad en el que quiero rellenar las ciudades que tengo desde mi base de datos de Firebase, mientras escribo.

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

Esto es lo que tengo hasta ahora.

¿Cómo puedo recuperar de las ciudades DB que comienzan con una letra (entrada del teclado)? Si empiezo a escribir "G", quiero recibir "Guayaquil" y "Gualaceo".

Si yo usoorderByValue siempre devuelve una instantánea vacía.

Si yo usoorderByKey devolver toda la lista

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

Nota: Si puede recomendar una mejor estructura de datos, de nada.

Respuestas a la pregunta(3)

Su respuesta a la pregunta