2016-10-16 23 views
1

コーディングの下に実行されたときに私のFirebaseデータベースは、このFirebase以降.getvalueないと同じ順序でデータベース

Firebase Database

のようなものです:

String loc=(snapshot.child("loc").getvalue()).tostring(); 

私が手出力はと異なる配列を有しますデータベース:

Output

なぜそうですか?

+0

注文は重要ですか? –

+0

はい、注文は重要です。 – jwen

+0

firebasseデータベース参照を表示できますか?firebase refが間違ったノードを指していると思います – Hamza

答えて

3

FirebaseデータはJSONとして保存され、本質的に順不同です。

特定の順序でデータにアクセスする場合は、クエリにorderBy句を指定し、スナップショットのgetChildren()メソッドを使用してデータにアクセスする必要があります。

を使用すると、キーの昇順でアイテムを記録したいと言うことですね:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getRef(); 
Query locations = rootRef.orderByKey(); 
locations.addListenerForSingleValueEvent(new ValueEventListener() { 
    public void onDataChange(DataSnapshot snapshot) { 
    for (DataSnapshot locSnapshot: snapshot.getChildren()) { 
     System.out.println(locSnapshot.getKey() + ": " + locSnapshot.getValue(String.class)); 
    } 
    } 

    public void onCancelled(DatabaseError databaseError) { 
    Log.w(TAG, "loadPost:onCancelled", databaseError.toException()); 
    // ... 
    } 
}); 

このサンプルでは、​​Firebase documentation on reading lists of dataから(変更)しています。

1

フランクはあなたがここ

は、ドキュメントからの抜粋です forEachではなく、 child法(または child.foreach)を使用する必要があり orderBy....


使用して彼の正解をチェックアウトし、私の編集に私を打ちます:

JavaScriptオブジェクトの動作のために、 のJavaScr iptオブジェクトがval()によって返された場合、サーバ上の の順序やchild_addedイベントの順序に一致することは保証されません。つまり、forEach()が便利なのは です。 DataSnapshotの子は、クエリの順序で反復されることが保証されています。

出典:https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot#forEach

+0

これはJavaの質問です。なぜあなたはJavaScriptライブラリを引用していますか? –

+1

私はもっと 'forEach'はJava APIのメソッドではないことを意味しています –

+0

そうです、修正しましょう。 – sorifiend

関連する問題