android - 如何从 firebase 中的值中获取键

标签 android firebase firebase-realtime-database

当我知道字段“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/

相关文章:

jquery - 为什么 jQuery Mobile 1.1-rc1 再次使用 .gif 作为加载图标?

javascript - 创建用户,保存数据,然后更改页面

ios - 从Firebase Firestore获取数据时,我的SwiftUI应用程序崩溃并出现错误。这可能是什么原因造成的?

android - java.lang.NoClassDefFoundError : Failed resolution of: Lcom/squareup/okhttp/OkHttpClient error when using Picasso offline capability - Android 错误

java - 在 Firebase 的 onDataChange 中设置变量(单值监听器)

Firebase 数据库规则 : can't write to database

带有 ImageView 的Android ScrollView 无法正常工作

Android 应用程序,与插入 USB 端口的设备通信

android - Facebook api 在 openActiveSession 期间卡在 "Opening"

swift - Firebase 未存储在 UIPickerView 中选择的正确值