根据特定参数获取Firebase数据库引用-Android Studio
我通常从firebase数据库获取我的元组引用,如下所示:根据特定参数获取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”)将
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");
}
我在这里使用的查询
类是数据库引用
的父类,因此它有许多您在处理数据库引用时已经知道的方法,并且可以以大致相同的方式使用