J'essaie d'écrire ceci sur ma Firebase
Parent
--0: John
--1: Tim
--2: Sam
--3: Ben
Je fais ça
String[] names = {"John","Tim","Sam","Ben"};
myFirebaseRef.setValue(names);
Et ce n’est rien d’écrire.
Cela fonctionne à l'aide de la console Chrome pour Firebase.
N'est-ce pas la façon dont vous écrivez un tableau dans Firebase?
Merci
La méthode .setValue()
nécessite List
plutôt que Array
.
Les types natifs acceptés par cette méthode pour la valeur correspondent à les types JSON: Boolean, Long, Double, Map, String, Object, List, Object ...
Firebase ref = new Firebase("<my-firebase-app>/names"):
String[] names = {"John","Tim","Sam","Ben"};
List nameList = new ArrayList<String>(Arrays.asList(names));
// Now set value with new nameList
ref.setValue(nameList);
Mais, je recommande d’utiliser une Map
au lieu d’une List
. Plutôt que d'avoir une clé basée sur un index (1, 2, 3, ...), vous pouvez utiliser le nom comme clé pour faciliter la récupération.
Firebase ref = new Firebase("<my-firebase-app>/names"):
HashMap<String, String> names = new HashMap()<String, String>;
names.put("John", "John");
names.put("Tim", "Tim");
names.put("Sam", "Sam");
names.put("Ben", "Ben");
ref.setValue(names);
Et maintenant, si vous voulez récupérer les données, il vous suffit de connaître le nom.
Firebase ref = new Firebase("<my-firebase-app>/names"):
Firebase johnRef = ref.child("john");
johnRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.value); // the String "John"
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
Je ne suis pas sûr de Java, mais pour une application Web, vous pouvez utiliser quelque chose comme suit:
Je voulais créer une fonction réutilisable pour ajouter/enregistrer n'importe quel objet sous un nœud racine (même s'il contient un tableau de données à n'importe quel niveau de l'objet) . Alors je suis venu avec cela. (Je ne sais pas si est conforme aux meilleures pratiques, mais cela a fonctionné sans encombre)
SaveWholeData: function(sKey, oVal, bGenKey) {
bGenKey = bGenKey === undefined ? true: bGenKey;
var oOriginalProperty = angular.copy(oVal);
for (var property in oVal) {
if (oVal.hasOwnProperty(property) && oVal[property] instanceof Array) {
console.log(property);
oVal[property] = "$|$";
}
}
var sOwnRef = SaveDataByKey(sKey, oVal, bGenKey);
for (var property in oVal) {
if (oVal.hasOwnProperty(property) && oVal[property] === "$|$") {
oVal[property] = oOriginalProperty[property];
var updatedReference = sOwnRef + "/" + property;
SaveWholeData(updatedReference, oVal[property], false);
}
}
return true;
},
SaveDataByKey: function(sKey, oVal, bGenKey) {
if (bGenKey) {
var newPostKey = firebase.database().ref(sKey).Push().key;
oVal.genKey = newPostKey;
firebase.database().ref(sKey).child(newPostKey).set(oVal);
return sKey + "/" + newPostKey;
}else{
firebase.database().ref(sKey).set(oVal);
return sKey;
}
}
Donc, pour ajouter un nouvel utilisateur sous root users
, vous appelez:
SaveWholeData("users", oUserInfo, true);
et pour mettre à jour l'utilisateur existant :
SaveWholeData("users"+"/"+ oUserInfo.genKey, oUserInfo, true);