我写了一个从Firebase接收数据并将其放入sharedPreferences的类。但有时它是null,有时我得到正确的数据。我的代码在下面。
private void userLogin() {
progressDialog.setMessage("Please wait");
progressDialog.show();
firebaseAuth.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
success=task.isSuccessful();
DatabaseReference userReference = FirebaseDatabase.getInstance().getReference().child("user");
userReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
try {
User user = postSnapshot.getValue(User.class);
if (user.getEmail().equals(email.getText().toString())) {
username= user.getUsername();
key=dataSnapshot.getKey()+"/"+postSnapshot.getKey();
}
}catch(Exception e){
}
}
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
CountDownTimer cd= new CountDownTimer(3000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
progressDialog.dismiss();
Log.d("FRIEND", "sendNewFriendRequest: "+username + " bu");
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
sharedPreferences.edit()
.putString("username",username)
.commit();
}
if (success) {
Intent i1 = new Intent(getApplicationContext(),Menu.class);
startActivity(i1);
}
}
}.start();
}
});
}
}
所以我在FirebaseDB中搜索一个包含我想要的电子邮件的元素并获取其用户名。然后我尝试将这个用户名放到SharedPreferences但是当我把它放在它时它仍然是null。我怎么能解决这个问题呢?
答案 0 :(得分:0)
您尝试执行的操作是在用户使用Firebase登录时验证是否存在电子邮件地址。但是如果用户已经被烧毁会发生什么?你将获得null。因此,为了解决此问题,请从signInWithEmailAndPassword
方法中取出该代码,并验证即使用户已登录也存在。
希望它有所帮助。