Ich verwende Firebase als Back-End für meine Anwendung. Zuerst habe ich Firebase-Instanz verwendet, um Objekt in Firebase-Datenbank zu speichern, die vollkommen in Ordnung war, aber ich musste die Implementierung ändern, um Schlüssel aus Objekt für meine weitere Implementierung zu erhalten. Nach der Änderung der Implementierung werden jedoch beim Speichern einige Eigenschaften verworfen.Unterschied zwischen Firebase-Instanz und DatabaseReference
Im Folgenden finden Sie die Codes und Screenshots beider Implementierungen.
Umsetzung 1.
Firebase ref = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_advertisement);
ref = new Firebase("https://xxxxxxxxxxxx.firebaseio.com/");
}
addAdvertisement.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Mobile mobile = new Mobile(lclManu, lclMdl);
MobileAdd mobileAdd = new MobileAdd();
mobileAdd.setMobile(mobile);
mobileAdd.setPrice(lclPrice);
mobileAdd.setdescription(lclDes);
mobileAdd.setDate(date);
User publishere = new User();
Log.d("UUID", mAuth.getCurrentUser().getUid());
publishere.setUUID(mAuth.getCurrentUser().getUid());
ref.child("Advertisements").push().setValue(mobileAdd);
}
Implementierung 2.
DatabaseReference ref = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_advertisement);
ref = FirebaseDatabase.getInstance().getReference();
addAdvertisement.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Mobile mobile = new Mobile(lclManu, lclMdl);
MobileAdd mobileAdd = new MobileAdd();
mobileAdd.setMobile(mobile);
mobileAdd.setPrice(lclPrice);
mobileAdd.setdescription(lclDes);
mobileAdd.setDate(date);
User publishere = new User();
mobileAdd.setPublisher(publishere);
DatabaseReference dbRef = ref.child("Advertisements").push();
dbRef.setValue(mobileAdd);
}
}
});
Es folgt der Screenshot mit dem Ergebnis der Umsetzung.
Hervorgehobene Eigenschaften fehlen in der zweiten Implementierung. Warum, wenn ich mit DatabaseReference
speichere, fehlen mir diese Eigenschaften und mit Firebase
Verweis kann ich obejects ohne Probleme speichern?
- Gibt es spezielle Szenarien, sollten wir diese beiden Methoden verwenden?
- Warum sollten wir eine Methode vor einer anderen wählen?
- Wie kann ich dieses Problem in der zweiten Implementierung überwinden?
Aktualisierung.
public class MobileAdd extends Add {
private Offer offers;
private Mobile mobile;
private User publisher;
private List<String> imagepaths;
public MobileAdd() {
}
public MobileAdd(String description, double price, Date date) {
super(description, price, date);
}
public MobileAdd(String description, double price, Date date,Offer offers, Mobile mobile, User publisher) {
super(description, price, date);
this.offers = offers;
this.mobile = mobile;
this.publisher = publisher;
}
public Offer getOffers() {
return offers;
}
public void setOffers(Offer offers) {
this.offers = offers;
}
public Mobile getMobile() {
return mobile;
}
public void setMobile(Mobile mobile) {
this.mobile = mobile;
}
public User getPublisher() {
return publisher;
}
public void setPublisher(User publisher) {
this.publisher = publisher;
}
public List<String> getImagepaths() {
return imagepaths;
}
public void setImagepaths(List<String> imagepaths) {
this.imagepaths = imagepaths;
}
}
Klasse hinzufügen.
public class Add {
private String key;
private String description;
private double price;
private Date date;
protected Add() {
}
public Add(String description, double price, Date date) {
this.description = description;
this.price = price;
this.date = date;
}
public String getdescription() {
return description;
}
public void setdescription(String description) {
this.description = description;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
}
Klasse Mobil
public class Mobile{
private String manufacturer;
private String model;
public Mobile() {
}
public Mobile(String manufacturer, String model) {
this.manufacturer = manufacturer;
this.model = model;
}
protected Mobile(Parcel in) {
manufacturer = in.readString();
model = in.readString();
}
public String getManufacturer() {
return manufacturer;
}
public void setManufacturer(String manufacturer) {
this.manufacturer = manufacturer;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
Geben Sie den Code für Ihre 'MobileAdd'- und' Mobile'-Klassen ein. _Implementation1_ verwendet das Firebase Legacy SDK, das Jackson zum Serialisieren/Deserialisieren von POJOs verwendet. _Implementation2_ verwendet das neue SDK, das nicht Jackson verwendet. Die unterstützten Anmerkungen und akzeptierten POJO-Formulare unterscheiden sich zwischen den beiden SDKs. –
@qbix Klassen hinzugefügt –