【问题标题】:Firebase Android : How to get list inside specific child?Firebase Android:如何在特定子项中获取列表?
【发布时间】:2017-08-22 17:53:17
【问题描述】:

我正在尝试检索特定孩子的内部列表。请参考以下结构。

如果我想检索“recipient”的“servicesArrayList”,其中“billNo”为“135”,我应该编写什么查询,以便可以将该查询传递给 FirebaseRecyclerAdapter (firebase -ui)

FirebaseRecyclerAdapter 用于特定收件人的 servicesArrayList。

    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
    String uid = user.getUid();

    Query query = FirebaseDatabase.getInstance()
            .getReference(RECIPIENT_NODE)
            .child(uid)
            .child("servicesArrayList")
            .orderByChild ?




recipient // parent Node

 2R1Q8qKEPHXFU1OiMq5TyxHBaZa2 // uId

   -KgJhMAWADwownv5tck6  // push Id
   -KgJhMAWADwownv5tck6
   -KgJoD77HQK-yACD_EuB
   -KgJoRXVUP_-Z0gLhIWy
   -KgJob82t47PvTjfTtig
   -KgK-N_Av_2kmmQS0Ulx

   -KgNu-fVWwFDLnRENj_b // Recipient Data
        billNo: 135
        billingMonth: "July 2017"
        childGender: "Ms."
        childName: "xyz"
        date: "29/03/2017"
        fineAmount: 0
        paymentStatus: "UNPAID"
        pushId: "-KgNu-fVWwFDLnRENj_b"
        receiptUrl:"https://firebasestorage.googleapis.com/v0/b/ngf..."
        recipientEmail: "abc@gmail.com"
        recipientName: "Abc C."
        servicesArrayList
                 -0
                    -amount: 1000
                    -charges: "1000"
                    -noOfSessions: 1
                    -serviceType: "Speech And Language Assessment"

        total: 1000
        vat: 0

【问题讨论】:

  • 您是否只想在一个推送 id 中使用 serviceArrayList 的值?仅在-KgNu-fVWwFDLnRENj_b\serviceArrayList 中。或者在2R1Q8qKEPHXFU1OiMq5TyxHBaZa2中的所有推送ID?
  • @koceeng only -KgNu-fVWwFDLnRENj_b\serviceArrayList not from all 。就像这个查询只给我所有“未付”的收件人。查询 query = FirebaseDatabase.getInstance() .getReference(RECIPIENT_NODE) .child(uid) .orderByChild("paymentStatus") .equalTo("UNPAID");
  • 那你试过FirebaseDatabase.getInstance().getReference(RECIPIENT_NODE).child(uid).child(pushId).child("servicesArrayList");吗?代码知道目标的pusId吧?
  • @koceeng 那是完美的答案!谢谢!

标签: android firebase firebase-realtime-database firebase-authentication firebaseui


【解决方案1】:

试试这个:

     Query query = FirebaseDatabase.getInstance()
            .getReference(RECIPIENT_NODE)
            .child(uid).orderByChild("billNo").equalTo(135);
query.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
      Query query1= dataSnapshot.getRef().child("servicesArrayList");
       //pass this query to adapter of firebaseRecyclerAdapter      
     FirebaseRecyclerAdapter  adapter = new FirebaseRecyclerAdapter<>(,,,query1){} 
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

        // ...
    }
});

【讨论】:

  • 我需要将此“查询”对象传递给我的 FirebaseRecyclerAdapter。如果我想提取“servicesArrayList”然后将其传递给普通的 RecyclerAdapter,我可以使用它。
  • 您可以提取serviceArraylist,然后将其传递给普通的RecyclerAdapter。
  • 是的。正如我的问题中提到的,我正在寻找适当的查询。谢谢!
【解决方案2】:

如果你知道 uid 和 push id,那么应该这样做:

Query query = FirebaseDatabase.getInstance().getReference(RECIPIENT_NODE)
    .​child(uid).child(pus‌​hId).child("services‌​ArrayList");

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2015-01-22
    • 1970-01-01
    • 2021-12-15
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多