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