java - recuperar - Escritura de matriz en Firebase para Android
setvalue firebase android (2)
Intento escribir esto en mi Firebase
Padre
--0: John
--1: Tim
--2: Sam
--3: Ben
yo estoy haciendo esto
String[] names = {"John","Tim","Sam","Ben"};
myFirebaseRef.setValue(names);
Y no está escribiendo nada.
Funciona con Chrome Console para Firebase.
¿No es esta la forma en que escribes una matriz para firebase?
Gracias
El método .setValue()
necesita una List
lugar de una Array
.
Los tipos nativos aceptados por este método para el valor corresponden a los tipos JSON: booleano, largo, doble, mapa, cadena, objeto, lista, objeto ...
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);
Pero, recomiendo usar un Map
lugar de una List
. En lugar de tener una clave basada en índice (1,2,3 ...), puede usar el nombre como clave para que sea más fácil de recuperar.
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);
Y ahora, si desea recuperar los datos, solo necesita saber el nombre.
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) {
}
});
Lee los documentos de Firebase para obtener más información.
No estoy seguro acerca de Java, pero para la aplicación web, puede usar algo de la siguiente manera:
Quería crear una función reutilizable para agregar / guardar cualquier objeto debajo de un nodo raíz (incluso si eso tiene una matriz de datos en cualquier nivel dentro del objeto) . Así que se me ocurrió esto. (No estoy seguro si cumple con las mejores prácticas, pero funcionó bastante bien)
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;
}
}
Entonces, para agregar un usuario nuevo bajo users
root, llame:
SaveWholeData("users", oUserInfo, true);
y para actualizar al usuario existente :
SaveWholeData("users"+"/"+ oUserInfo.genKey, oUserInfo, true);