2017-02-01 3 views
0

私はRecyclerView内でアイテムをソートするためにSortedListを使用しています。 私はいくつかのユニークなIDでそれらを比較する必要があり、Firebaseはそのために素晴らしいキーを提供します。プリセットオブジェクトIDがFirebaseにプッシュするとき

私は実行する必要がデータベースに新しい価値をプッシュする:

public void addAdvert(Advert advert, String userId) { 
     String id = reference.child(NODE_USERS) 
     .child(userId) 
     .child(NODE_ITEMS) 
     .push() 
     .getKey() //execute this to just get the id 

     advert.setId(id); 
     getCurrentItemNode().child(advert.getId()).setValue(advert); 

} 

今、データベース内の私の広告アイテムが完全にIdを、ノードのキーが装備されています。

しかし、私は好奇心」は、私はちょうど

reference.child(NODE_USERS) 
      .child(userId) 
      .child(NODE_ITEMS).push().setValue(advert); 

のようなものを書いて、同じ結果を得ることができますキーとIDの両方がデータベースに設定されています。

答えて

1

キーをアイテムに格納する場合は、最初にキーを生成して書き込む2つの書き込み操作またはを実行する必要があります。

しかし、なぜあなたはその項目にキーを保存したいのですか?注意点として、このコード

を:

String id = reference.child(NODE_USERS) 
    .child(userId) 
    .child(NODE_ITEMS) 
    .push() 
    .getKey() 

は、この全く同じです:

String id = reference.push().getKey() 

FirebaseのプッシュIDは、統計的にユニークな値であることが保証され、生成されたクライアント側です。それらはパスに依存せず、これらの値を決定するために必要なデータベースへのラウンドトリップもありません。

詳細については、このブログ記事を参照してください。The 2^120 Ways to Ensure Unique Identifiers

+0

これは@pufエラーですか? 'String id = reference.child(NODE_USERS).getKey()'は 'NODE_USERS'が何であっても返します。おそらく 'reference.push()。getKey()'を意味していたでしょうか?あるいは、私は混乱しているかもしれません。 –

+1

うん、それは確かにコピー/貼り付け/修正された誤った部分でした。キャッチするためにありがとう! –

+0

あなたの答えをありがとう。私は次回にデータベースから取得するときに項目をユニークにするために項目にキーを格納したいと思う。 –

関連する問題