如何从 Firebase 实时数据库中获取特定类型的数据?
How can I fetch certain type of data from Firebase Realtime Database?
我知道这方面有很多代码,但我找不到解决我的问题的方法。
我有一个实时数据库:
我必须获取“saluteBossMassima:”
我声明和初始化变量的方式:
DatabaseReference databaseMonster;
String id;
databaseMonster=FirebaseDatabase.getInstance().getReference("monster");
id = databaseMonster.push().getKey();
我尝试的代码:
databaseMonster.child(id).addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String saluteMassimaBossDB = dataSnapshot.child("monster").child("saluteBossMassima").getValue().toString();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
谁能帮帮我?
这行不通:
databaseMonster=FirebaseDatabase.getInstance().getReference("monster");
id = databaseMonster.push().getKey();
当您调用 push()
时,它会生成一个用于写入的新的唯一密钥。这与屏幕截图中的现有密钥相同的可能性为零。
如果您已经知道要读取的节点的密钥,则应将该密钥传递给child()
:
// specify key here
databaseMonster.child("-MtcylP327pK9pUQB54").addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String saluteMassimaBossDB = dataSnapshot.child("saluteBossMassima").getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException(); // never ignore errors
}
});
如果您知道要读取的节点的某些值,但不知道键,则可以使用查询来查找节点:
// Use a query to select the nodes with a specific value
Query query = databaseMonster.orderByChild("dannoAttaccoCaricato").equalTo(300);
query.addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Loop over the results, since there may be multiple
for (DataSnapshot monsterSnapshot: dataSnapshot.getChildren()) {
String id = monsterSnapshot.getKey();
String saluteMassimaBossDB = monsterSnapshot.child("saluteBossMassima").getValue(String.class);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException();
}
});
现在我们需要遍历dataSnapshot.getChildren()
,因为dannoAttaccoCaricato
.
可能有多个值为300
的节点
如果您对节点一无所知,您能做的最好的事情就是读取所有节点并循环遍历结果:
// Read all nodes under /monster
databaseMonster.addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot monsterSnapshot: dataSnapshot.getChildren()) {
String id = monsterSnapshot.getKey();
String saluteMassimaBossDB = monsterSnapshot.child("saluteBossMassima").getValue(String.class);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException();
}
});
我知道这方面有很多代码,但我找不到解决我的问题的方法。
我有一个实时数据库:
我必须获取“saluteBossMassima:”
我声明和初始化变量的方式:
DatabaseReference databaseMonster;
String id;
databaseMonster=FirebaseDatabase.getInstance().getReference("monster");
id = databaseMonster.push().getKey();
我尝试的代码:
databaseMonster.child(id).addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String saluteMassimaBossDB = dataSnapshot.child("monster").child("saluteBossMassima").getValue().toString();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
谁能帮帮我?
这行不通:
databaseMonster=FirebaseDatabase.getInstance().getReference("monster");
id = databaseMonster.push().getKey();
当您调用 push()
时,它会生成一个用于写入的新的唯一密钥。这与屏幕截图中的现有密钥相同的可能性为零。
如果您已经知道要读取的节点的密钥,则应将该密钥传递给child()
:
// specify key here
databaseMonster.child("-MtcylP327pK9pUQB54").addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String saluteMassimaBossDB = dataSnapshot.child("saluteBossMassima").getValue(String.class);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException(); // never ignore errors
}
});
如果您知道要读取的节点的某些值,但不知道键,则可以使用查询来查找节点:
// Use a query to select the nodes with a specific value
Query query = databaseMonster.orderByChild("dannoAttaccoCaricato").equalTo(300);
query.addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// Loop over the results, since there may be multiple
for (DataSnapshot monsterSnapshot: dataSnapshot.getChildren()) {
String id = monsterSnapshot.getKey();
String saluteMassimaBossDB = monsterSnapshot.child("saluteBossMassima").getValue(String.class);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException();
}
});
现在我们需要遍历dataSnapshot.getChildren()
,因为dannoAttaccoCaricato
.
300
的节点
如果您对节点一无所知,您能做的最好的事情就是读取所有节点并循环遍历结果:
// Read all nodes under /monster
databaseMonster.addValueEventListener(newValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot monsterSnapshot: dataSnapshot.getChildren()) {
String id = monsterSnapshot.getKey();
String saluteMassimaBossDB = monsterSnapshot.child("saluteBossMassima").getValue(String.class);
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
throw error.toException();
}
});