2016-05-19 9 views
4

firebaseでアンドロイドアプリを作ろうとしています。firebaseにstartAt()を使って検索機能を使いたいです。しかし結果は私を混乱させます。Firebaseについての混乱startAt()

私はこのようなfirebaseのデータをいくつか持っています。

{ 
    "siswa" : { 
    "100" : { 
     "id" : 100, 
     "nama" : "Sucipto" 
    }, 
    "101" : { 
     "id" : 101, 
     "nama" : "Tomo" 
    }, 
    "102" : { 
     "id" : 102, 
     "nama" : "Fitri" 
    }, 
    "103" : { 
     "id" : 103, 
     "nama" : "Sumini" 
    }, 
    "104" : { 
     "id" : 104, 
     "nama" : "Eko" 
    }, 
    "106" : { 
     "id" : 106, 
     "nama" : "Sulastri" 
    } 
    } 
} 

私のサンプルクエリ

// Setup Firebase 
final FirebaseDatabase database = FirebaseDatabase.getInstance(); 
// Firebase siswa ref 
final DatabaseReference siswaRef = database.getReference("siswa"); 
// Query 
Query suciptoQuery = siswaRef.orderByChild("nama").startAt("Sucipto"); 

結果:

01同上:私は

D/Query Sucipto: Nama : Sucipto 
D/Query Sucipto: Nama : Sulastri 
D/Query Sucipto: Nama : Sumini 
D/Query Sucipto: Nama : Tomo 

は別のテストクエリ

Query suciptoQuery = siswaRef.orderByChild("nama").startAt("Su"); 

の検索結果を試します

別のクエリ:

Query suciptoQuery = siswaRef.orderByChild("nama").startAt("Tomo"); 

または

Query suciptoQuery = siswaRef.orderByChild("nama").startAt("To"); 

結果:

D/Query Sucipto: Nama : Tomo 

私はSOにこのトピックについて検索していますが、それでもすべてのソリューションを持っていません。

答えて

1

私はstartAt()ドキュメントをチェックアウトしましたが、ロジックはかなり混乱しています。しかし、私はそれを正しく理解していれば(はい、完全にはわからないが、先に進むと助けになるだろう)。あなたの最初の試みで

開始値Suciptoで、私はこれが辞書的に大きくなっているの単語/文字列に続くことを示していると思いますが、対象が含まれています。が返されませんでしたあなたは、参照内のすべてのある他の子の間で、結果に回向Fitriを見ることができるように、アルファベット順であるため、「S」をはるかに「F」と「Eの後であります'

別の値を追加しようとしていることを確認できます。「Sucipta」が含まれているとします。 startAt()の値が "Sucipto"の場合にクエリを再実行すると、 "Sucipta"の最後の文字が高い(またはアルファベット順に最初に(a、b、c ....)申し訳ありませんが、私はちょうど良い言葉を見つけることができません)。

これは役に立つかもしれないと思います。詳細は、Firebase Retrieving Dataのドキュメントを参照してください。ある例では、数字の代わりに文字を使用していました。

+1

"辞書的に大きい"という用語は、あなたが探している用語です – Tony

+0

そうだと思います。 Firebaseのドキュメントを読んだ後、これを更新するのを忘れました。ありがとう@トニー:) –

関連する問題