我正试图使用用户的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变量。检查了auth控制台,得到了";身份验证完成: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);**
我再次查看了我的日志,我得到了";身份验证完成:true//id:userid";"idcheck:null";。
我尝试过的东西:
- 将子项更改为uname(另一个String变量(。数据已按预期发布到实时数据库中
- 将"quot"围绕userID。不确定我认为它会做什么,但值得一试
- 将所有字符串和底部代码放置在onComplete方法中
我以前也用过,但不确定怎么用,所以我知道这是可能的。TIA!
更新:
我把变量设为全局变量,而不是最终变量。现在一切如常。
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);
看起来您正试图在onComplete
回调之外访问userID
,但这是行不通的。
原因是身份验证是异步进行的,到reference.child(userID).setValue(newUser)
运行时,userID = newUserID.getUid()
还没有运行。如果您在调试器中运行代码,并在这些行上放置断点,或者在其中添加一些日志记录,您可以很容易地看到这一点。
任何需要UID的代码都需要在用户登录完成时调用的onComplete
中,或者从那里调用。
因此:
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser newUserID = mAuth.getCurrentUser();
userID = newUserID.getUid();
BasicUser newUser = new BasicUser(fullName, uname, userEmail, password, confirmPassword, city, newState, zip, type);
reference.child(userID).setValue(newUser);
...
});
另请参阅:
- getContactsFromFirebase((方法返回一个空列表,该列表用于实时数据库,但处理相同的问题,并包含更长的解释和示例
- 无法获取kotlin中firebase的当前用户
所以我将变量设为全局变量。轻微打嗝。编辑内容在更新后的帖子中。