[英]How to receive specific information from Firebase Realtime db in Android?
[英]How to receive additional information by using firebase in android
當用戶第一次注冊時,我通過以下代碼使用sendEmailVerification
:
FirebaseUser mFirebaseUser = mFirebaseAuth.getCurrentUser();
String uid = mFirebaseUser.getUid();
FirebaseFirestore db = FirebaseFirestore.getInstance();
mFirebaseUser.sendEmailVerification().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
startToast("Plz go to your mail box.");
UserAccount account = new UserAccount(uid, strEmail, strPwd);
db.collection("Basic_users").document(mFirebaseUser.getUid()).set(account).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void avoid) {
finish();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
startToast("failed to register");
}
});
這里是 useAccount.java
public class UserAccount {
private String idToken;
private String strEmail;
private String strPwd;
public void setIdToken(String idToken) {
this.idToken = idToken;
}
public void setStrEmail(String strEmail) {
this.strEmail = strEmail;
}
public void setStrPwd(String strPwd) {
this.strPwd = strPwd;
}
public String getIdToken() {
return idToken;
}
public String getStrEmail() {
return strEmail;
}
public String getStrPwd() {
return strPwd;
}
public UserAccount(String idToken, String strEmail, String strPwd) {
this.idToken = idToken;
this.strEmail = strEmail;
this.strPwd = strPwd;
}
如您所見,所有信息均已准確收到。
但是我想在用戶第一次使用該應用程序時收到更多信息。 所以我試圖通過以下代碼接收更多信息
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user == null) { //IF there's no user information go to registerActiviety
startActivity(registerActivity.class);
} else { //else get current user information
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference docRef = db.collection("users").document(user.getUid());
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) { //if document exist
Log.d(TAG, "DocumentSnapshot data: " + document.getData());
} else { //else go to MemberinitActivity and receive some
//additional information
Log.d(TAG, "No such document");
startActivity(MemberinitActivity.class);
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
這是memberinfo.java,它有我想要接收更多的信息。
public class MemberInfo
{
private String idToken;
private String name;
private String birthday;
private String address;
private String phone_number;
public MemberInfo(String idToken, String name, String birthday,String
phone_number,String address) {
this.idToken = idToken;
this.name = name;
this.birthday = birthday;
this.phone_number = phone_number;
this.address = address;
}
public void setIdToken(String idToken) {
this.idToken = idToken;
}
public void setName(String name) {
this.name = name;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public void setAddress(String address) {
this.address = address;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
public String getIdToken() {
return idToken;
}
public String getName() {
return name;
}
public String getBirthday() {
return birthday;
}
public String getAddress() {
return address;
}
public String getPhone_number() {
return phone_number;
}
}
檢查日志后,我發現程序將文檔識別為存在,但實際上沒有“如果文檔存在”的日志(空)
我認為該程序很困惑,因為它們共享相同的getcurrentuser()
如何分隔兩個用戶值並接收附加信息?
我認為程序很混亂,因為它們共享相同的 getcurrentuser()
不,這不是您沒有獲得任何數據的原因。 您的代碼中的問題在於您將數據寫入到 Firestore 的以下位置:
db.collection("Basic_users").document(mFirebaseUser.getUid())
//👆
但是您正試圖從不同的位置讀取:
DocumentReference docRef = db.collection("users").document(user.getUid());
//👆
由於您的屏幕截圖顯示該用戶存在於Basic_users
集合下,因此要解決此問題,請將最后一行代碼更改為:
DocumentReference docRef = db.collection("Basic_users").document(user.getUid());
//👆
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.