当我知道字段“name”在 Firebase 的以下结构中包含“efg”时,如何获取键“-KLpcURDV68BcbAvlPFy”。
clubs
-KLpcURDV68BcbAvlPFy
dept: "abc"
desc: "xyz"
name: "efg"
-asdasdasddsad
dept: "asda"
desc: "asd"
name: "adddd"
我试过了,但它返回了“俱乐部”
mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey =dataSnapshot.getKey();
最佳答案
那是因为您正在使用 ValueEventListener
。如果查询匹配多个 child ,它会返回所有这些 child 的列表。即使只有一个匹配的 child ,它仍然是一个列表。由于您在该列表上调用 getKey()
,因此您将获得运行查询的位置的键。
要获取匹配子项的键,遍历快照的子项:
mDatabase.child("clubs")
.orderByChild("name")
.equalTo("efg")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
String clubkey = childSnapshot.getKey();
但请注意,如果您假设俱乐部名称是唯一的,那么您不妨将俱乐部存储在他们的名字下,然后无需查询即可访问正确的俱乐部:
mDatabase.child("clubs")
.child("efg")
.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String clubkey = dataSnapshot.getKey(); // will be efg
关于android - 如何从 firebase 中的值中获取键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38232140/