gpt4 book ai didi

android - onDataChange 的值返回 null

转载 作者:行者123 更新时间:2023-11-30 01:00:17 27 4
gpt4 key购买 nike

我正在尝试从我的 Firebase 数据库中获取数据我有两个 fragment ,一个用于注册,另一个用于登录我在将数据插入 Firebase 时没有问题,但不知何故我无法从中返回数据

这些是我登录 fragment 中的一些代码:

private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;

@Override
public void onStart() {
super.onStart();
mAuth.addAuthStateListener(mAuthListener);
}

@Override
public void onStop() {
super.onStop();
if (mAuthListener != null) {
mAuth.removeAuthStateListener(mAuthListener);
}
}

我在 onCreate 方法中有这段代码:

 mAuth = FirebaseAuth.getInstance();
mAuthListener = new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
user = firebaseAuth.getCurrentUser();
if(user != null)
{
getExistingUserInfo(user.getUid());
}
};

这是我从 firebase

query 数据的方法
 public void getExistingUserInfo(String uid){

final FirebaseDatabase database = FirebaseDatabase.getInstance();

database.getReference("allUsers").child(uid)
.orderByChild("emailAddress")
.equalTo(mEmailStr)
.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Log.e("Data Changed YEA!",dataSnapshot.toString());

}

@Override
public void onCancelled(DatabaseError databaseError) {
}

});

问题是,当我启动应用程序并在 onCreate 中调用 getExistingUserInfo 时,它会从我的设备正确返回上次登录用户的数据

> E/Data Changed YEA!: DataSnapshot { key =
> vWOypZ07sbeQKEtXnAwbEEV7ml43, value = {password=123456789,
> username=ahmed, sgl=true, emailAddress=ahmeddirect@gmail.com,
> studyGroupName=Study Group 2} }

但是当我按下登录时,它的值返回 null

E/Data Changed YEA!: DataSnapshot { key = vWOypZ07sbeQKEtXnAwbEEV7ml43, value = null }

所以我必须关闭应用程序并重新打开它才能正确获取数据!!

这是用户登录的代码,它位于 onCreateView 方法中的 clickListener 中:

mAuth.signInWithEmailAndPassword(mEmailStr, mPasswordStr).addOnCompleteListener(getActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(Task<AuthResult> task) {
if (task.isSuccessful())
{

Toast.makeText(getContext(),"Succeed!",Toast.LENGTH_LONG).show();

}
else
{
Toast.makeText(getContext(),"Failed!",Toast.LENGTH_LONG).show();
}
}
});

这就是我的数据库的样子:

Click to see the Image

最佳答案

好吧,首先我不明白你为什么要使用 AuthStateListener删除 onStartonStoponCreate 中的代码用这个替换你的 getExistingUserInfo

public void getExistingUserInfo() {
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
String userID = user.getUid();
FirebaseDatabase database = FirebaseDatabase.getInstance();
database.getReference("allUsers").child(userID).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
hashMap = (HashMap<String, String>) dataSnapshot.getValue();
List<String> dataS = new ArrayList<>(hashMap.values());

for (String data : dataS) {
Log.e("Database Data", data);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {

}
});
}

将此方法发布到 signin 按钮的 onClickListener 中,就可以了

Note: If you wanna do anything with the returned data then you should do it inside onDataChange after the data is returned

关于android - onDataChange 的值返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39532858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com