FirebaseとNoSQLを初めて使用しました。私はアンドロイドのデモを持っています。市のオートコンプリートテキストフィールドには、入力中にFirebase DBから持っている都市を設定したいと思っています。AndroidでFirebase Realtime Databaseからデータを取得する
{ "cities":{
"Guayaquil":true,
"Gualaceo":true,
"Quito":true,
"Quevedo":true,
"Cuenca":true,
"Loja":true,
"Ibarra":true,
"Manta":true
}
}
これは私がこれまで行ってきたことです。
文字列(キーボードからの入力)で始まるDB都市を検索するにはどうすればよいですか?私が "G"と打ち始めると、 "Guayaquil"と "Gualaceo"を受け取りたい。
orderByValue
を使用すると、常に空のスナップショットが返されます。
orderByKey
を使用すると、リスト全体が返されます。
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());
}
注:あなたはより良いデータ構造をお勧めすることができます場合、あなたは歓迎しています。
都市のこのデータベースはどのくらいでしょうか?あなたのアプリケーションがローカルコピー(ある種の配列のような)にデータベースを一度読み込み、ローカルロジックを使って適切な値だけを表示して入力するのは当然でしょうか? – Ryan
最初は約10になりますが、100まで増やすことができます。この機能を「オンライン」にしたいので、ローカルに保存する必要なしに新しい都市を追加できます。 –
ああ良いです。プロセッサとネットワークに関する100の小さな文字列は事実上何もないので、間違いなく高速になります。私はそれをローカルに格納することによって何を意味するのかを明らかにする。私はランタイム中にメモリ内にあることを意味します。私は、デバイスのストレージやそのようなものにコピーを格納することを意味しません。私が意味するのは、都市を配列に読み込んだ後、配列を使ってデータを表示することです。データベースが変更されると、アレイをほぼ即座に非常に簡単に更新できますが、頻繁に変更されるのではないでしょうか。私が何を考えていたのか、もう少し説明してください。 – Ryan