L'ultima parte si farà con il metodo helper.save(...) avente per parametro la classe stessa.
Il problema sta nella lettura dei dati.
Vediamo...
Ecco: bisogna aggiungere un listener (ho subordinato la lettura dei dati alla pressione su un button).
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.getValue());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
});
10-21 12:30:54.625 10720-10720/? I/System.out: {-KUae5VrVyXMk2lFt39t={cognome=Bianchi, professione=Ladro, nome=Carlo, eta=54}, -KUae5VW3jfCoWP2yQmc={cognome=Rossi, professione=Scassinatore, nome=Mario, eta=45}, -KUae5VsYGesGotl6PZf={cognome=Verdi, professione=Falsario, nome=Luigi, eta=36}}Vediamo se riesco a essere un po' più specifico: qui ho aggiunto il listener a tutto il database.
Provo ad aggiungerlo a un singolo nodo...
La via migliore che ho trovato, non avendo predeterminati i nomi dei nodi, né potendovi costruire agevolmente un ciclo for...next, è quella di prendermi tutto il DataSnapshot, come da tutorial trovati, e separarlo nei singoli nodi mediante il getChildren().
button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot record : dataSnapshot.getChildren()){ System.out.println(record.getValue()); } } @Override public void onCancelled(DatabaseError databaseError) { } }); } });Ed eccoli in sequenza:
10-21 13:00:57.645 15520-15520/? I/System.out: {cognome=Rossi, professione=Scassinatore, nome=Mario, eta=45} 10-21 13:00:57.645 15520-15520/? I/System.out: {cognome=Bianchi, professione=Ladro, nome=Carlo, eta=54} 10-21 13:00:57.645 15520-15520/? I/System.out: {cognome=Verdi, professione=Falsario, nome=Luigi, eta=36}
Ora devo solo vedere come convertire questi in istanze della classe Persona, da poter dare in bocca al mio metodo helper.save come parametri, e il gioco è fatto...
Dopo essere ammattito un po', ho trovato quello che serve a me.
E' più semplice di quello che sembrava:
button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { databaseReference.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for(DataSnapshot record : dataSnapshot.getChildren()){ Persona p=record.getValue(Persona.class); System.out.println("NOME "+p.nome+" - COGNOME "+p.cognome+" - PROFESSIONE "+p.professione); } } @Override public void onCancelled(DatabaseError databaseError) { } }); } });E ottengo l'immediato cambiamento sul dispositivo quando vado a cambiare qualcosa nel database remoto.
Perfetto!
Nessun commento:
Posta un commento