0

我通常从 firebase 数据库中获取我的 tupla 的参考,如下所示:

private DatabaseReference needsRef;

public void onCreate(...) {
     ...
     needsRef = FirebaseDatabase.getInstance().getReference().child("favors");
}

但现在我想将包含指定参数调用“type”的行放在“needsRef”中。如果 (type == "need"),将这些行放在 "needsRef" 中,如果 (type == "offer"),将其放在另一个名为 "offersRef" 的 DatabaseReference 中。

我显示了我的数据库的屏幕截图以澄清问题

数据库上“青睐”之后的孩子是一个并不总是相同的名字。 我显示图像

你能帮帮我吗?

4

3 回答 3

2

听起来您需要两个查询:一个只包含需求,另一个只包含报价。这很容易做到:

private Query needsQuery;
private Query offersQuery;

public void onCreate(...) {
     ...
     DatabaseReference favorsRef = FirebaseDatabase.getInstance().getReference().child("favors");
     needsQuery = favorsRef.orderByChild("type").equalTo("need");
     offersQuery = favorsRef.orderByChild("type").equalTo("offer");
}

我在这里使用的Query类是 的父类DatabaseReference,因此它具有许多您在使用数据库引用时已经知道的方法,并且可以以几乎相同的方式使用。

于 2018-10-15T14:26:29.230 回答
0

如果您在代码中添加事件侦听器(即值事件侦听器),您可以创建一个 for 循环来循环遍历子项。然后在此循环中,您可以使用基于类型的 if 语句进行测试。

        DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
        ref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot)
        {
            DataSnapshot needRef = dataSnapshot.child("favors");
            for (DataSnapshot snap : needRef.getChildren())
            {
                String type = snap.child("type").getValue().toString();

                //This then references the type you need. Just add children as you need to get to the needed node
                dataSnapshot.child(type)...;
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });
于 2018-10-15T13:58:18.727 回答
0

您可以检查如下代码的值:

   ArrayList<DataClass> temp1 = new ArrayList<>();
   ArrayList<DataClass> temp2 = new ArrayList<>();
   @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot)
    {
        if(!temp1.isEmpty() && !temp2.isEmpty())
           temp1.clear();temp2.clear();         

        DataSnapshot dataSnapTemp = dataSnapshot.child("favors");
        for (DataSnapshot datasnap : dataSnapTemp.getChildren())
        {
            String type = datasnap.child("type").getValue().toString();
            if(type.equals("need")){
                temp1.add(your object)
            }else if(type.equals("need")){
                temp2.add(your object)
            }
        }
    }
于 2018-10-15T14:12:15.470 回答