【发布时间】:2017-01-10 00:19:22
【问题描述】:
我正在使用 firebase 作为我的应用程序的后端。 首先,我使用 Firebase 实例将对象保存到 firbase 数据库,它工作得非常好,但我必须更改实现以从保存的对象中获取密钥以供进一步实现。但是在更改实现后,它会在保存时丢弃一些属性。
以下是两种实现的代码和屏幕截图。
实施 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);
}
实施 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);
}
}
});
第二个实现中缺少突出显示的属性。为什么当我使用 DatabaseReference 保存时,我缺少这些属性,而使用 Firebase 引用时,我可以毫无问题地保存对象?
- 是否有特殊场景我们应该使用这两种方法?
- 我们为什么要选择一种方法而不是另一种方法。
- 如何在第二次实施中克服这个问题?
更新。
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;
}
}
类添加。
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;
}
}
课堂移动
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;
}
}
【问题讨论】:
-
发布
MobileAdd和Mobile课程的代码。 Implementation1 使用 Firebase Legacy SDK,它使用 Jackson 序列化/反序列化 POJO。 Implementation2 使用新的 SDK,它不使用 Jackson。两个 SDK 支持的注解和接受的 POJO 形式不同。 -
@qbix 添加类
标签: android firebase firebase-realtime-database