7

私はfirebaseの初心者で、これをAndroidアプリのバックエンドとして使用してデータを保存しようとしています。データの形式は、キーと値のペアです。

これは、データを保存するために使用しているコードです:

Map<Integer, PersonData> map = new HashMap<Integer, PersonData>();
map.put(PersonData.getID(), new PersonData("abcd", 12345));
Firebase ref = new Firebase(url).push();
ref.setValue(map);

プッシュ参照が使用されているため、データは次のように保存されます。

-J5upSABqTLJ1Wfu-jFq  
 12345
   id: 12345
   name: abcd

どこで、データを次のように保存したいのですか:

12345
   id: 12345
   name: abcd

上記のコード サンプルがデータを保存する正しい方法であるかどうかは完全にはわかりません。後で既存のデータを更新できるようにしたいので。助言がありますか ?

編集 1: firebase リポジトリの既存のデータを上書きしないように、プッシュを使用する必要があると考えています。getValue() メソッドを使用してデータを取り戻そうとしましたが、MAP にあるデータしかフェッチできません。

編集 2: 私の参照で push() メソッドを使用しないと、以前のデータが上書きされ、最新の情報のみが利用可能であることがわかります。参照を取得し、以前の情報を維持するためのより良い方法であるかどうか疑問に思っています

4

1 に答える 1

15

したがって、一意の ID の独自のシステムがあるように見えます。この場合、.pushメソッドを使用する必要はありません (これは、新しいデータの一意の参照を取得するための単なるヘルパーです)。したがって、プッシュする代わりに、次のことができるはずです。

Map<Integer, PersonData> map = new HashMap<Integer, PersonData>();
map.put(PersonData.getID(), new PersonData("abcd", 12345));
Firebase ref = new Firebase(url).child("12345");
ref.setValue(map);

あなたの id が"12345"でありurl、すべてのpersons.

上書きせずにデータを更新するには、次のrefようにします。

Firebase ref = new Firebase(url).child("12345");

を使用する代わりに、 を使用.setValueすることをお勧めしますref.updateChildren(updates)docsupdatesの例から構造化する方法を確認できます。

Map<String, Object> updates = new HashMap<String, Object>();
updates.put("first", "Fred");
updates.put("last", "Swanson");
nameRef.updateChildren(updates);
于 2013-10-18T13:38:27.410 に答える