Jestem nowy w Firebase i NoSQL. Mam demo Androida z polem autouzupełniania City City, w którym podczas wpisywania tekstu chcę zapełniać moje miasta z bazy danych Firebase DB.Pobieranie danych z bazy danych Firebase Realtime w systemie Android
{ "cities":{
"Guayaquil":true,
"Gualaceo":true,
"Quito":true,
"Quevedo":true,
"Cuenca":true,
"Loja":true,
"Ibarra":true,
"Manta":true
}
}
To jest to, co do tej pory miałem.
Jak mogę pobrać z miast DB, które zaczynają się od litery (dane wejściowe z klawiatury)? Jeśli zacznę pisać "G", chcę otrzymać "Guayaquil" i "Gualaceo".
Jeśli użyję orderByValue
zawsze zwróci pustą migawkę.
Jeśli użyję orderByKey
zwrócę całą 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());
}
Uwaga: Jeśli możesz polecić lepszą strukturę danych, jesteś mile widziany.
Jak duży będzie to baza miast być? Czy aplikacja mogłaby raz odczytać w bazie danych lokalną kopię (taką jak tablica), a następnie użyć lokalnej logiki, aby wyświetlać tylko odpowiednie wartości podczas pisania? – Ryan
Początkowo będzie to około 10, ale może wzrosnąć nawet do 100. Chciałem, aby ta funkcja była "online", dzięki czemu mogę dodawać nowe miasta bez potrzeby przechowywania ich lokalnie. –
To dobrze. Jeśli chodzi o procesor i sieć, to 100 małych strun to właściwie nic, więc zdecydowanie będzie szybko. Pozwól mi wyjaśnić, co mam na myśli, przechowując je lokalnie. Mam na myśli pamięć podczas uruchamiania, to wszystko. Nie chodzi mi o przechowywanie kopii w pamięci urządzeń ani niczego w tym stylu. Chodzi o to, że czytam miasta w tablicy, a następnie pracuję z tą tablicą, aby wyświetlić dane. Gdy baza danych się zmienia, możesz bardzo łatwo zaktualizować tablicę niemal natychmiast, ale wątpię, by zmieniała się ona często. Sprawdź moją odpowiedź, aby dowiedzieć się więcej o tym, co myślałem. – Ryan