【发布时间】:2017-08-23 22:14:08
【问题描述】:
我有以下两种构建数据的方法。想知道哪种方法是正确的,因为在每种情况下我都遇到了不同的限制。
案例 1:嵌套对象 - 此处推送单个对象,以维护与收件人相关的所有记录。与收件人相关的所有数据都可以在单个“查询”中获取,可以传递给 Firebase-Ui (FirebaseRecyclerAdapter)
问题:将数据添加到“servicesArrayList”。因为它是基于索引的 (0,1,2,...)。新推送将添加 pushId (-KgJoRXVUP_-Z0gLhIWy)。打破结构(参考下面的代码)。现在在检索数据时崩溃。 (将数据反序列化为结构需要 ArrayList 时的问题)
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
Recipient recipient = dataSnapshot.getValue(Recipient.class);
}
问题:有没有办法在新推送时维护索引,或者在第一次推送时它可以以某种不同的方式构建?
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String uid = user.getUid();
Query query = FirebaseDatabase.getInstance()
.getReference(RECIPIENT_NODE)
.child(uid)
.orderByChild("billNo")
.equalTo(135);
recipient // parent Node
2R1Q8qKEPHXFU1OiMq5TyxHBaZa2 // uId
-KgJhMAWADwownv5tck6 // push Ids
-KgJhMAWADwownv5tck6
-KgJoD77HQK-yACD_EuB
-KgJoRXVUP_-Z0gLhIWy
-KgJob82t47PvTjfTtig
-KgK-N_Av_2kmmQS0Ulx
-KgNu-fVWwFDLnRENj_b // Recipient Data
billNo: 135
billingMonth: "July 2017"
childName: "xyz"
date: "29/03/2017"
fineAmount: 0
paymentStatus: "UNPAID"
pushId: "-KgNu-fVWwFDLnRENj_b"
recipientEmail: "abc@gmail.com"
recipientName: "Abc C."
servicesArrayList
-0 //added when recipient object was pushed
-amount: 1000
-charges: "1000"
-noOfSessions: 1
-serviceType: "Speech And Language Assessment"
-1 //added when recipient object was pushed
-amount: 1200
-charges: "600"
-noOfSessions: 2
-serviceType: "Group Sessions"
-KgJoRXVUP_-Z0gLhIWy // added as an update to exsiting list (errrr ! now structure is breaking.)
-amount: 1200
-charges: "600"
-noOfSessions: 2
-serviceType: "Group Sessions"
vat: 0
案例 2:为 Recipient 和 Services 维护 2 个不同的结构。
问题:必须触发 2 个不同的“查询”。分别合并 2 个数据,然后将其传递给普通适配器(不能使用 Firebase-ui)。使用 ChildListener / ValueeventListener 进行监控。 使用 FOREIGN KEY 进行映射,比较繁琐。
问题:有没有办法使用单个查询从两个节点获取数据?
所以我需要问题 1 和 问题 2 的答案,并且需要了解哪种方法是正确的?
【问题讨论】:
标签: android firebase firebase-realtime-database firebase-authentication firebaseui