首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多查询和参考Firebase数据库Android

多查询和参考Firebase数据库Android
EN

Stack Overflow用户
提问于 2018-10-31 00:29:29
回答 2查看 3.5K关注 0票数 3

我的防火墙数据库如下所示:

从这个查询中

代码语言:javascript
复制
String currentUserID = FirebaseAuth
                            .getInstace()
                            .getCurrentUser()
                            .getUid();

DatabaseReference favorsRef = FirebaseDatabase
                                        .getInstance()
                                        .getReference()
                                        .child("favors");
Query myChatsQuery = favorsRef
                        .orderByChild("uid")
                        .equalTo(currentUserID);

我需要创建其他查询,以便从myChatsQuery获得元组,后者的子元素名为"messages“。如果元组没有子“消息”,我不想在我的新查询中插入它。

那么,如何从其他查询中创建查询呢?

帮帮我,

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-31 04:04:40

不幸的是,orderByChild()不能同时在多个相同的字段上工作,因此您可能需要分两步完成这项工作。

首先,您可以运行orderByChild()查询,查找currentUserId,然后将所有匹配的查询添加到ArrayList中,然后在已找到的uids for messages中运行orderByChild()

如下所示,在代码中:

代码语言:javascript
复制
reference.orderByChild("uid").equalTo(currentUserId).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                            if(dataSnapshot.exists())
                              array.add(dataSnapshot.getValue(String.class);
                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                  )};

上面的代码将uids匹配currentUserId添加到ArrayList array中。

代码语言:javascript
复制
databaseReference.child(array.get(0)).addListenerForSingleValueEvent(new ValueEventListener() {
                        @Override
                        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                           if(dataSnapshot.child("messages").exists())
                           // do your thing

                        }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }

                    )};    

您还可以使用for循环来遍历array中的所有值。

票数 1
EN

Stack Overflow用户

发布于 2018-10-31 13:14:52

要解决这个问题,请使用以下代码:

代码语言:javascript
复制
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
Query query = rootRef.child("favors").orderByChild("uid").equalTo(uid);
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            if(ds.child("messages").exists()) {
                //Do what you need to do
            }
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage());
    }
};
query.addListenerForSingleValueEvent(valueEventListener);

正如您所看到的,您可以通过只查询一次数据库来解决这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53074665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档