找不到孩子的孩子价值 Firebase Android

Posted

技术标签:

【中文标题】找不到孩子的孩子价值 Firebase Android【英文标题】:Cant find childs child value Firebase Android 【发布时间】:2017-01-02 22:03:55 【问题描述】:

在我的 Main Activity 中,我通过在 whole 数据库中搜索用户 ID (user.getUid) 来检查用户是否已经注册到我的应用程序,但每次(即使用户 ID已保存在数据库中),查询找不到它。

        mAuthListener = new FirebaseAuth.AuthStateListener() 
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) 
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user == null) 
                //User is signed out
                startActivity(intentlogin);
                Log.d(TAG, "onAuthStateChanged:signed_out");
                finish();
             else 

                //User is signed in
                Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                //has user Username?
                String Userid = user.getUid();
                Query usernamequery = mRef.orderByChild("Userid").equalTo(Userid);
                usernamequery.addListenerForSingleValueEvent(new ValueEventListener() 
                    @Override
                    public void onDataChange(DataSnapshot snapshot) 
                        if (snapshot.exists()) 

                            //should go here when user id in database
                            // TODO: handle the case where the data already exists
                            return;
                        
                        else 

                            //This is where it always lands
                            // TODO: handle the case where the data does not yet exist
                            startActivity(intentusername);
                            finish();
                        
                    

这就是我的数据库的样子:

root:

Users:

customusername

       Userid:   "ondkinwakdnakjnxjexampleuseridindjan" (this it can't find!)

       Username: "customusername"

【问题讨论】:

mRef 是如何初始化的? 如果mRef 像这样FirebaseDatabase().getInstance().getReference().child("Users") 那么它应该可以工作 我会将其添加为评论,因为它不完全符合您的要求。我建议您首先不应该像这样构建您的数据。使用 UserId 作为每个用户的入口点,而不是 customusername!然后您就完全消除了尝试搜索用户的问题。一旦您执行user.getUid();,您就知道该用户应该在哪里;根 -> 用户 -> uid。无需搜索或订购,从长远来看将为您省去很多麻烦。 会不会和我做的一样? 如果我正确阅读了您的帖子,则不会。正如您所说,您正在整个数据库中搜索 id。如果您有 10,000 个用户怎么办?通过使用 userId 作为您不需要搜索的每个用户的键,您不使用查询,您只需在该节点上设置一个侦听器:root -> Users -> userId 【参考方案1】:

请记住,即使您正在查询单个项目,查询也总是返回值列表。遍历这些值。

Query usernamequery = mRef.orderByChild("Userid").equalTo(Userid);
                    usernamequery.addListenerForSingleValueEvent(new ValueEventListener() 
                        @Override
                        public void onDataChange(DataSnapshot snapshot) 
                            if (snapshot != null && snapshot.getChildren != null) 

                                //Define a model class for user that contains UserId and Username
                                for(DataSnapshot child : snapshot.getChildren()) 

                                    Model model = child.getValue(Model.class);

                                    //now, get the UserId and username from the model class

                                model.getUserId();

                            
                        
                        else 

                            //This is where it always lands
                            // TODO: handle the case where the data does not yet exist
                            startActivity(intentusername);
                            finish();
                        
                    

【讨论】:

目前这对我来说可能不是最好的答案,但它在另一个课程中会派上用场(用户名是否被占用)谢谢

以上是关于找不到孩子的孩子价值 Firebase Android的主要内容,如果未能解决你的问题,请参考以下文章

从多个孩子 Android Firebase 中检索同一个孩子

如何从孩子(firebase)查询所有孩子的值[重复]

Swift Firebase 读取孩子的孩子

如何在另一个孩子 Firebase 中按孩子订购

Firebase如何显示孩子未知ID的特定孩子

如何在 Firebase 中获得上孩子?