簡體   English   中英

如何在android中使用firebase接收附加信息

[英]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;
    }

注冊后的 Firebase 信息

如您所見,所有信息均已准確收到。
但是我想在用戶第一次使用該應用程序時收到更多信息。 所以我試圖通過以下代碼接收更多信息

  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM