java - example - updatechildren firebase
Guardar clase en firebase (2)
En primer lugar, debe agregar a su clase de pojo, la construcción de ningún argumento necesaria para Firebase y los establecedores public setters
y public getters
para cada campo como este:
public class CreditCardInfoObject implements Serializable {
private String title;
privat eString startTime;
private String endTime;
private String day;
public CreditCardInfoObject() {}
public String getTitle() {return title;}
public void setTitle(String title) {this.title = title;}
public String getStartTime() {return startTime;}
public void setStartTime(String startTime) {this.startTime = startTime;}
public String getEndTime() {return endTime;}
public void setEndTime(String endTime) {this.endTime = endTime;}
public String getDay() {return day;}
public void setDay(String day) {this.day = day;}
}
Tenga en cuenta que no necesita campos estáticos. También tenga en cuenta que i set all your fields as private
. Es una muy mala práctica establecer esos campos como públicos.
Ahora, para establecer el valor de su clase pojo, necesita crear un nuevo objeto de clase CreditCardInfoObject y usar los setters públicos. Al tener este nuevo objeto, puedes guardarlo en la base de datos de Firebase así:
CreditcardinfoOjbect obj = new CreditcardinfoOjbect();
obj.setTitle("foo");
obj.setStartTime("bar");
obj.setEndTime("1");
obj.setDay("2");
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
String uid = "";
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();
if (user != null) {
uid = user.getUid();
}
DatabaseReference ref = rootRef.child("users").child(uid).child("account").child("creditcards");
ref.setValue(obj);
Mi clase es CredicardinfoObject.class
public class CreditcardinfoOjbect implements Serializable {
private static final long serialVersionUID = 1L;
public static String title;
public static String startTime;
public static String endTime;
public static String day;
}
Esta clase solo tiene propiedades estáticas. No hay instanciación necesaria.
En mi mainActivity.class , quiero establecer los valores de la clase y luego almacenar esta base de datos de firebase. Esta es mi mainActivity.class .
CreditcardinfoOjbect.title = "foo";
CreditcardinfoOjbect.startTime = "bar";
CreditcardinfoOjbect.day = "1";
CreditcardinfoOjbect.endTime = "2";
final FirebaseDatabase database = FirebaseDatabase.getInstance();
String uid = "";
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();
if (user != null) {
uid = user.getUid();
}
DatabaseReference ref = database.getReference("users").child(uid).child("account").child("creditcards");
HashMap<String, Class<CreditcardinfoOjbect>> hashMap = new HashMap<>();
hashMap.put("card", CreditcardinfoOjbect.class);
ref.setValue("card",hashMap );
Desafortunadamente, esto no está funcionando. ¿Cómo puedo almacenar el valor actual de una clase en Firebase?
Intente cambiar su código en la clase CreditCardInfoObject
public class CreditCardInfoObject implements Serializable {
public String title;
public String startTime;
public String endTime;
public String day;
public CreditCardInfoObject() {
}
public CreditCardInfoObject(String title, String startTime, String endTime, String day) {
this.title = title;
this.startTime = startTime;
this.endTime = endTime;
this.day = day;
}
@Exclude
public Map<String, Object> toMap() {
HashMap<String, Object> result = new HashMap<>();
result.put("title", title);
result.put("startTime", startTime);
result.put("endTime", endTime);
result.put("day", day);
return result;
}
}
Cambie su código en MainActivity como a continuación
String title = "foo";
String startTime = "bar";
String endTime = "1";
String day = "2";
final FirebaseDatabase database = FirebaseDatabase.getInstance();
String uid = "";
FirebaseAuth auth = FirebaseAuth.getInstance();
FirebaseUser user = auth.getCurrentUser();
if (user != null) {
uid = user.getUid();
}
final Map<String, Object> dataMap = new HashMap<String, Object>();
CreditCardInfoObject creditCardInfoObject = new CreditCardInfoObject(title,startTime,endTime,day);
DatabaseReference ref = database.getReference("users").child(uid).child("account");
dataMap.put("creditcards", creditCardInfoObject.toMap());
ref.updateChildren(dataMap);
Para más información: documentación de Firebase
Espero que funcionó. Siéntete libre de preguntarme cualquier cosa.