Java Firebase addListenerForSingleValueEvent datasnapshot返回null

Java Firebase addListenerForSingleValueEvent datasnapshot返回null,java,android,firebase-realtime-database,firebase-authentication,Java,Android,Firebase Realtime Database,Firebase Authentication,我尝试使用Firebase实时数据库进行登录活动 我的数据库在注册时填写如下: 登录后,我想初始化一个公共静态用户,以便在我的主活动中检索它并相应地更新UI,但ValueEventListener的dataSnapshop返回null 以下是我的addListenerForSingleValueEvent的代码: currentUserReference.addListenerForSingleValueEvent(new ValueEventListener() { @Overrid

我尝试使用Firebase实时数据库进行登录活动

我的数据库在注册时填写如下:

登录后,我想初始化一个公共静态用户,以便在我的主活动中检索它并相应地更新UI,但ValueEventListener的dataSnapshop返回null

以下是我的addListenerForSingleValueEvent的代码:

currentUserReference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

        currentUserUsername = dataSnapshot.child("/username").getValue(String.class);
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        currentUserUsername = "ERROR";
    }

});

// Get every information into a User class
MainActivity.CURRENT_USER_SESSION = new User(
        currentUserUsername,
        user.getEmail(),
        user.getUid()
);
任何人都有办法帮助我。或者有什么解决方法或建议可以做得更好

编辑:下面是currenUserReference的初始化

currentUserReference = database.getReference("users/" + user.getUid());
数据库在onCreate中初始化,如下所示:

database = FirebaseDatabase.getInstance();
从中获取Uid的“用户”是firebaseAuth.getCurrentUser在检查带有EmailAndPassword.addOnCompleteListener的登录是否成功后返回的FirebaseUser

在addListenerForSingleValueEvent之后,我添加了一个可写的Log.d,如下所示:

Log.d(TAG, "Value of variable: " + currentUserUsername);
我希望CurrentUserUserUserName在数据库中具有分配的“username”值,但是,我得到:

LoginActivity:变量的值:null

Edit2:在调试时,我意识到当调试器到达.addListenerForSingleValueEvent并按F8时,它会完全跳过此方法。因此,正如有人在评论中所说,datasnapshot可能不是空的,它从未被访问过。但我仍然不明白为什么。

dataSnapshot.getValue(String.class)在退出onDataChange时不会返回null 您的CurrentUserUserUserName已重新初始化

因此,要将值传递给下一个活动,您需要:

currentUserReference.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            currentUserUsername = dataSnapshot.getValue(String.class);
            // Get every information into a User class
            MainActivity.CURRENT_USER_SESSION = new User(
                    currentUserUsername,
                    user.getEmail(),
                    user.getUid()
            );
            Intent intent = new Intent(
                    LoginActivity.this, MainActivity.class);
            startActivity(intent);
        }

请编辑您的问题,以包括如何初始化
currentUserReference
的代码。另外请注意:传递给
onDataChange
dataSnapshot
将永远不会为空。到底什么不起作用。通常最容易看到是否包含了som`Log.d()`语句,这些语句不会产生预期的输出`@不幸的是,Black4Guy不起作用。我编辑了更多可能有用的信息。既然Frank告诉我datasnapshot不可能返回null,并且我确认这实际上不是我调试的问题,那么我应该编辑标题吗?