私はアプリケーションのバックエンドとしてfirebaseを使用しています。 まずFirebaseのインスタンスを使用してオブジェクトを完全に正常に動作するデータベースに保存しましたが、私の実装を保存するオブジェクトからキーを取得するように実装を変更しなければなりませんでした。実装を変更した後は、保存時にプロパティの一部を破棄します。FirebaseインスタンスとDatabaseReferenceの相違点
以下は、両方の実装のコードとスクリーンショットです。
実装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);
}
}
});
2番目の実装では強調表示されたプロパティがありません。 DatabaseReference
で保存すると、なぜこれらのプロパティがなくなり、Firebase
のリファレンスで問題なくobejectsを保存できますか?
- これらの2つの方法を使用する特別なシナリオはありますか?
- なぜ私たちは別の方法で1つの方法を選択すべきですか?
- 2番目の実装でこの問題をどのように克服できますか?
更新。
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;
}
}
クラスAdd。
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_は、Jacksonを使用してPOJOをシリアル化/デシリアライズするFirebase Legacy SDKを使用します。 _Implementation2_は、Jacksonを使用しない新しいSDKを使用します。サポートされているアノテーションと受け入れられたPOJOフォームは、2つのSDKで異なります。 –
@qbixクラスを追加 –