我正在尝试使用该用户的id创建子级。我在此处创建用户时找到了该id,并在logcat中获得了该用户id:
final String fullName = findViewByid(R.id.fullName);
.
. // Other strings declared here
.
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser newUserID = mAuth.getCurrentUser();
userID = newUserID.getUid();
Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
检查了logcat,看到了userid变量。检查了身份验证控制台,得到了“身份验证”complete:true //id:userid”。
这就是问题所在。
public void onComplete(@NonNull Task<AuthResult> task) {
.
.
.
});
Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
Log.w(TAG, "idcheck:" + userID);
**reference.child(userID).setValue(newUser);**
我又查了一遍日志,我得到了“身份验证”complete:true //id:userid“”idcheck:null“。
我尝试过的事情:
将子项更改为uname(另一个字符串变量)。数据已按预期发布到实时数据库中
将“”放在userid周围。我不知道我认为它会做什么,但值得一试
在oncomplete方法中放置所有字符串和底部代码
我以前用过,但不知道怎么用,所以我知道这是可能的。蒂亚!
更新:
我让变量是全局的而不是最终的。现在一切正常。
public class(){
String fullName;
public void signUp(){
public void onComplete(@NonNull Task<AuthResult> task) {
});
Log.w(TAG, "AuthenticationComplete:true //id:" + userID);
BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
Log.w(TAG, "idcheck:" + userID);
reference.child(userID).setValue(newUser);
2条答案
按热度按时间vsaztqbk1#
看起来你想进入
userID
外面的onComplete
回拨,这是行不通的。这是因为身份验证是异步进行的,并且在
reference.child(userID).setValue(newUser)
跑步,跑步userID = newUserID.getUid()
还没跑呢。如果您在调试器中运行代码,并在这些行上放置断点,或者向其中添加一些日志记录,您将很容易看到这一点。任何需要uid的代码都必须在
onComplete
当用户登录完成时调用,或者从那里调用。所以:
另请参见:
getcontactsfromfirebase()方法返回一个空列表,该列表用于实时数据库,但处理相同的问题,并包含较长的解释和示例。
无法在kotlin中获取firebase当前用户
m1m5dgzv2#
所以我把变量设为全局变量。轻微打嗝。已更新的帖子中有编辑。