Java Firebase addListenerForSingleValueEvent datasnapshot返回null
我尝试使用Firebase实时数据库进行登录活动 我的数据库在注册时填写如下: 登录后,我想初始化一个公共静态用户,以便在我的主活动中检索它并相应地更新UI,但ValueEventListener的dataSnapshop返回null 以下是我的addListenerForSingleValueEvent的代码: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
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,并且我确认这实际上不是我调试的问题,那么我应该编辑标题吗?