根据特定参数获取Firebase数据库引用-Android Studio

根据特定参数获取Firebase数据库引用-Android Studio,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我通常从firebase数据库获取我的元组引用,如下所示: private DatabaseReference needsRef; public void onCreate(...) { ... needsRef = FirebaseDatabase.getInstance().getReference().child("favors"); } 但是现在我想在“needsRef”中只放一些行,这些行包含一个指定参数调用“type”的内容。If(type==“need”)将

我通常从firebase数据库获取我的元组引用,如下所示:

private DatabaseReference needsRef;

public void onCreate(...) {
     ...
     needsRef = FirebaseDatabase.getInstance().getReference().child("favors");
}
但是现在我想在“needsRef”中只放一些行,这些行包含一个指定参数调用“type”的内容。If(type==“need”)将这些行放在“needsRef”中,If(type==“offer”)将其放在另一个名为“offersRef”的数据库引用中

数据库中“favors”后面的子项是一个不总是相同的名称。


你能帮我一下吗?

如果你在代码中添加了一个事件监听器(即值事件监听器),你可以创建一个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) {

        }
    });

如果在代码中添加事件监听器(即值事件监听器),则可以通过子级创建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) {

        }
    });

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

   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)
            }
        }
    }
ArrayList temp1=new ArrayList();
ArrayList temp2=新的ArrayList();
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot)
{
如果(!temp1.isEmpty()&&!temp2.isEmpty())
temp1.clear();temp2.clear();
DataSnapshot dataSnapTemp=DataSnapshot.child(“偏好”);
对于(DataSnapshot datasnap:dataSnapTemp.getChildren())
{
字符串类型=datasnap.child(“类型”).getValue().toString();
if(type.equals(“需要”)){
temp1.添加(您的对象)
}else if(type.equals(“need”)){
temp2.添加(您的对象)
}
}
}

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

   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)
            }
        }
    }
ArrayList temp1=new ArrayList();
ArrayList temp2=新的ArrayList();
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot)
{
如果(!temp1.isEmpty()&&!temp2.isEmpty())
temp1.clear();temp2.clear();
DataSnapshot dataSnapTemp=DataSnapshot.child(“偏好”);
对于(DataSnapshot datasnap:dataSnapTemp.getChildren())
{
字符串类型=datasnap.child(“类型”).getValue().toString();
if(type.equals(“需要”)){
temp1.添加(您的对象)
}else if(type.equals(“need”)){
temp2.添加(您的对象)
}
}
}

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

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
的父类,因此它有许多您在处理数据库引用时已经知道的方法,并且可以以几乎相同的方式使用。

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

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");
}
我在这里使用的
查询
类是
数据库引用
的父类,因此它有许多您在处理数据库引用时已经知道的方法,并且可以以大致相同的方式使用