如何在使用FirebaseUI时从Firebase获取价值

时间:2018-02-12 21:14:49

标签: android firebase firebase-realtime-database firebase-authentication

我正在使用Auth Firebase用户界面。它的工作原理如下: 用户第一次进行身份验证,之后在onCreate方法应用程序中,在Database中创建一个名为user + email + status的新用户。 但问题是它触发每个onCreate并将所有值都设置为默认值。例如,如果我在settingsActivity中更改状态,它将在数据库中更改,一切正常但在我再次运行应用程序并且MainActivity中的onCreate方法再次触发我的状态后再次成为默认值。我想用if / else语句检查值,并检查数据库中的值与默认值不同,但不知道如何获取该值。 也许你可以建议另一个场景? 无论如何,谢谢你的时间。

 //Authstate Listener
    mAuthstateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            if (user != null) {
                Log.v(TAG, "user is not null");
                //Create new user
                String uid = user.getUid();
                String userName = user.getDisplayName();
                mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(uid);
                HashMap<String, String> userMap = new HashMap<>();
                userMap.put("name", userName);
                userMap.put("status", "Your status is here...");
                userMap.put("image", "default");
                userMap.put("thumb_image", "default");
                mDatabaseReference.setValue(userMap);

1 个答案:

答案 0 :(得分:1)

您可以read data once使用SingleValueEventListener:

            mDatabaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(uid);

            mDatabaseReference.addListenerForSingleValueEvent(new ValueEventListener {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    if(dataSnapshot.child("image").getValue(String.class).equals("default"))
                    {
                        //the image is still the default one
                    }
                    else{
                        //the image is no longer the default
                    }
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            });