I am trying to write this to my Firebase
Parent
--0 : John
--1 : Tim
--2 : Sam
--3 : Ben
I am doing this
String[
List sendingList = new ArrayList<>(Arrays.asList(SendingArray));
In case of any error, press Alt+Enter. It will correct it depending on you version of android studio
The .setValue()
method needs a List
rather than an Array
.
The native types accepted by this method for the value correspond to the JSON types: 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);
But, I recommend using a Map
instead of a List
. Rather than having an index based key (1,2,3...), you could use the name as the key so it's easier to retrieve.
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);
And now if you want to retrieve the data, you just need to know the name.
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) {
}
});
Read the Firebase docs for more information.
I am not sure about Java, but for web application, you can use something as follows:
I wanted to create a reusable function to add/save any object under a root node (even if that has an array of data at any level within the object). So I came up with this. (I am not sure if conforms to the best practices, but it worked pretty smooth)
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;
}
}
So to add new user under root users
, you call:
SaveWholeData("users", oUserInfo, true);
and to update existing user:
SaveWholeData("users"+"/"+ oUserInfo.genKey, oUserInfo, true);