繁体   English   中英

如何检查我的Firebase数据库是否具有特定用户的数据? (Android / Java)

[英]How can I check if my Firebase database has data for a certain user? (Android/Java)

当用户在我的android应用上使用firebase进行帐户注册时,需要将他们定向到可以添加一些单独信息(例如用户名)的屏幕。 该应用程序知道可以通过AuthStateListener来切换活动,因此当创建帐户或执行有人在此处登录代码时(此时,这里的意图都没有改变,请继续阅读以了解原因):

        mAuthListener = new FirebaseAuth.AuthStateListener() {
            @Override
            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
                FirebaseUser user = firebaseAuth.getCurrentUser();
                if (user != null) {
                    // User is signed in
                    Log.d(TAG, "onAuthStateChanged:signed_in:" + user.getUid());
                    userID = user.getUid();
                    toastMessage("User has signed in: " + user.getEmail());


                } else {
                    // User is signed out
                    Log.d(TAG, "onAuthStateChanged:signed_out");
                }
                // ...
            }
        };

在if块中,它检查用户是否等于null,这是我需要将意图更改为另一个活动的地方,他们将在其中输入用户名。 基本上,逻辑是,如果用户已经有一个用户名并且正在登录,那么他们将被定向到主屏幕活动,如果他们正在注册,则需要被定向到创建用户名的活动。 要知道我需要将其发送给哪个活动,我需要在firebase数据库中查找代码,并查看他们的帐户是否已经具有用户名。 在这种情况下,我无法弄清楚如何从Firebase读取数据,似乎从数据库读取数据的唯一方法(根据其他方法)似乎是通过onDataChange方法,如下所示:

        mRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Log.d(TAG, "This: "+dataSnapshot.getValue());
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

使用dataSnapshots。 问题在于,仅当将数据添加到数据库时才触发此代码,因此,当用户只是注册并且从未向数据库添加用户名时,此方法将不会执行任何代码。 我该如何查询以查看数据库中的数据,只是检查某个用户那里是否有任何数据?

在所有情况下都会触发OnDatachange ,如果用户添加数据,删除数据,更改数据等。

要检查用户是否已有用户名,请在OnDatachange内部执行以下操作

if(dataSnapshot.exists()){
//GO TO OTHER ACTIVITY
]else{
//GO TO SET USER DATA ACTIVITY
]

请参阅我的一种实现的示例:

if (user !=null){
            DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio");

            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){
                        bio.setText(dataSnapshot.getValue(String.class));

                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }

在此示例中,如果user_bio存在,则将文本设置为userbio,如果不执行任何操作。 第一次用户登录我的应用程序时,此方法什么也不做,但是当用户添加bio时,此方法会在userbio文本中设置bio文本。 但是,如果我想在用户没有简历的情况下显示一些文本,我只需添加其他代码,然后将文本设置为简历,例如:

if (user !=null){
            DatabaseReference myRef = database.getReference("users").child(user.getUid()).child("user_bio");

            myRef.addValueEventListener(new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if (dataSnapshot.exists()){
                        bio.setText(dataSnapshot.getValue(String.class));
                    }else{
                        bio.setText("no user bio");
                    }
                }
                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });
        }

您是否尝试在onCreate方法中使用addValueEventListener?

如果在onCreate方法中的侦听器中运行活动,则在打开活动时将触发一次。 所以我认为您在这里应该不会有问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM