【问题标题】:Difference between Firebase instance and DatabaseReferenceFirebase 实例和 DatabaseReference 之间的区别
【发布时间】: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 引用时,我可以毫无问题地保存对象?

  1. 是否有特殊场景我们应该使用这两种方法?
  2. 我们为什么要选择一种方法而不是另一种方法。
  3. 如何在第二次实施中克服这个问题?

更新。

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;
    }

}

【问题讨论】:

  • 发布MobileAddMobile 课程的代码。 Implementation1 使用 Firebase Legacy SDK,它使用 Jackson 序列化/反序列化 POJO。 Implementation2 使用新的 SDK,它不使用 Jackson。两个 SDK 支持的注解和接受的 POJO 形式不同。
  • @qbix 添加类

标签: android firebase firebase-realtime-database


【解决方案1】:

正如我在评论中提到的,Implementation1 使用 Firebase Legacy SDK,它使用 Jackson 来序列化/反序列化 POJO。 Implementation2 使用新的 SDK,它不使用 Jackson。两个 SDK 支持的注解和接受的 POJO 形式不同。

description 字段不是由 Implementation2 写入的,因为大写错误。 getter/setter 方法应为getDescription()setDescription(),大写为“D”。

另外,Date 不是一个简单的 POJO,不会被新的 SDK 序列化。一种选择是使用 Date.getTime() 并将日期存储为 long。

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 2014-04-08
    • 2010-11-15
    • 2020-04-21
    • 2018-06-14
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多