2017-04-23 9 views
-1

私はFirebaseには少し新しく、それに精通するために遊んでいます。だから私はリアルタイムのデータベースで遊んでいる間、私はJSONツリーにデータを追加しようとしていました。コードはFirebaseは、それらを追加するのではなく、既存のレコードを上書きします。

mSaudi.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      count++; 
      mHistory = mChildRef.child(Integer.toString(count)); 
      current = riyadh; 
      mChildRef.setValue(riyadh); 
      mHistory.push().setValue("riyadh"); 
     } 
    }); 

私はこのようなものである必要がツリー以下の通りです:

value: 
1: some text 
2: some other text 

しかし、何が実際に起こってはこれです:

value: 
    1: some text 

とupdation

を上
value: 
    2:some text 

前のen試しに消去しようとしました

私はさまざまな方法で参照を変更しようとしましたが、役に立たなかった。この点についての助けに感謝します。

+0

@downvotersを上書きする必要があります。この

mChildRef.child("2").setValue("some text");

を試すことができます。 –

答えて

0

Firebaseに値を設定すると、in、およびreferenceのすべてが置き換えられます。色とサイズ

のは、2つのチャイルズで、あなたは家の価値を持っているとしましょう。

setValue()の前に色の値のみを編集する場合は、押している参照を変更する必要があります。

参考文献がgetReference().child("houses")で、そこに何かを押した場合は、その下のすべてを置き換えます。これを行う方法は、getReference().child("houses").child(houseKey).child("color")のように新しい参照を作成する(またはプレビューを更新する)ことです。そこにStringを押します。

push()メソッドの前に、子として変更するフィールドを追加する必要があります。

もう1つの方法は既に@ Janwilx72であり、オブジェクト全体を取得していて、ローカルで値を更新し、オブジェクト全体を再度プッシュしています。

1

両方の値を保存する場合は、ハッシュマップなどの変数を使用して値を保存する必要があります。文字列を保存して、同じブランチの下に別の文字列を保存しようとすると、以前に保存されたものはすべて削除されます。したがって、以下を試してください

HashMap<String, String> map = new HashMap<>(); 
map.put("1","String"); 
map.put("2","String"); 
mHistory.push().setValue(map); 

これにより、両方の文字列が削除されずに保存されます。

あなただけのこのかかわらの最大の問題は、あなたが(プッシュを使用することを毎回ある

mHistory.push().child("1").setValue("Your first String"); 

1つの文字列を追加したい場合は)あなたにキーを保存しなければならないので、あなたは、ランダムなキーを生成あなたの子供の参照として使用してください。

+0

これは動作しますが、変更を行うたびにHashMap全体を新しいエントリとしてDBにプッシュする以外に、Firebaseで新しい要素だけを追加することは可能ですか? –

0

あなたはそれが新しいアイテムを追加する代わりに、彼らに説明してください

関連する問題