updatechildren recuperar query guardar example datos datasnapshot consultas java android firebase

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);