Сохраните мои файлы документов с текущим uid firebase вместо случайного - PullRequest
1 голос
/ 05 мая 2020

Итак, посмотрите, когда мой пользователь регистрирует себя, его идентификатор в базе данных firebase генерируется случайным образом, и я хочу иметь UID нового зарегистрированного пользователя в качестве идентификатора документа в firebase, как я могу это изменить? Я не нашел никакой функции, чтобы сохранить документ как строку или что-то в этом роде ..

Вот мой регистрационный код:


import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.FirebaseFirestore;

import java.util.HashMap;

public class RegisterActivity extends AppCompatActivity {

    private EditText UserName, FullName, eMail1, eMail2, Password, Day, Month, Year;
    private Button registerButton;
    private CheckBox male, female, other;
    private FirebaseAuth mAuth;
    private ProgressDialog loadingBar;
    public String currentUserId, username;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        mAuth = FirebaseAuth.getInstance();
        loadingBar = new ProgressDialog(this);
        UserName = (EditText) findViewById(R.id.register_username);
        FullName = (EditText) findViewById(R.id.register_name);
        eMail1 = (EditText) findViewById(R.id.register_email);
        eMail2 = (EditText) findViewById(R.id.register_email_2);
        Password = (EditText) findViewById(R.id.register_password);
        Day = (EditText) findViewById(R.id.register_birthday_day);
        Month = (EditText) findViewById(R.id.register_birthday_month);
        Year = (EditText) findViewById(R.id.register_birthday_year);
        registerButton = (Button) findViewById(R.id.register_button);
        male = (CheckBox) findViewById(R.id.register_male);
        other = (CheckBox) findViewById(R.id.register_other);
        female = (CheckBox) findViewById(R.id.register_female);
        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                CreateNewAccount();
            }
        });
    }

    private void CreateNewAccount() {
        username = UserName.getText().toString();
        String fullname = FullName.getText().toString();
        String email1 = eMail1.getText().toString();
        String email2 = eMail2.getText().toString();
        String password = Password.getText().toString();
        String day = Day.getText().toString();
        String month = Month.getText().toString();
        String year = Year.getText().toString();

        if(TextUtils.isEmpty(username)){
            Toast.makeText(this,"Please type in your username...", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(fullname)){
            Toast.makeText(this,"Please type in your full name...", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(email1)){
            Toast.makeText(this,"Please type in your eMail...", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(email2)){
            Toast.makeText(this,"Please retype your eMail again...", Toast.LENGTH_SHORT).show();
        }
        else if(!email1.equals(email2)){
            Toast.makeText(this,"You entered two different emails...? Please try again", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(password)){
            Toast.makeText(this,"Please type in your password...", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(day)){
            Toast.makeText(this,"Please enter your birthday day...", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(month)){
            Toast.makeText(this,"Please enter your birthday month...", Toast.LENGTH_SHORT).show();
        }
        else if(TextUtils.isEmpty(year)){
            Toast.makeText(this,"Please enter your birthday year...", Toast.LENGTH_SHORT).show();
        }
        else if(!male.isChecked() && !female.isChecked() && !other.isChecked()){
            Toast.makeText(this,"Chose your gender...", Toast.LENGTH_SHORT).show();
        }
        else if(male.isChecked() && female.isChecked()){
            Toast.makeText(this,"Please choose only one gender...", Toast.LENGTH_SHORT).show();
        }
        else if(male.isChecked() && other.isChecked()){
            Toast.makeText(this,"Please choose only one gender...", Toast.LENGTH_SHORT).show();
        }
        else if(female.isChecked() && other.isChecked()){
            Toast.makeText(this,"Please choose only one gender...", Toast.LENGTH_SHORT).show();
        }
        else{
            loadingBar.setTitle("Creating New Account");
            loadingBar.setMessage("Please wait, while we are creating your new Account...");
            loadingBar.show();
            loadingBar.setCanceledOnTouchOutside(true);
            mAuth.createUserWithEmailAndPassword(email1, password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if(task.isSuccessful()){
                        FirebaseUser user = mAuth.getCurrentUser();
                        SaveAccountInformation();
                        Toast.makeText(RegisterActivity.this,"Your account was created please check your email for an activation mail", Toast.LENGTH_LONG).show();
                        loadingBar.dismiss();
                        SendUserToMainActivity();
                    }
                    else{
                        String message= task.getException().getMessage();
                        Toast.makeText(RegisterActivity.this, "Error Occured: " + message, Toast.LENGTH_LONG).show();
                        loadingBar.dismiss();
                    }
                }
            });
        }
    }

    private void SaveAccountInformation() {
        currentUserId = mAuth.getCurrentUser().getUid();
        FirebaseFirestore db = FirebaseFirestore.getInstance();
        String gender;
        username = UserName.getText().toString();
        String fullname = FullName.getText().toString();
        String day = Day.getText().toString();
        String month = Month.getText().toString();
        String year = Year.getText().toString();

        if(male.isChecked()) {
            gender = "male";
        } else if(female.isChecked()){
            gender = "female";
        } else {
            gender = "other";
        }

        HashMap userMap = new HashMap();
        userMap.put("username", username);
        userMap.put("gender", gender);
        userMap.put("fullname", fullname);
        userMap.put("birthday", day+"/"+month+"/"+year);
        userMap.put("uid", mAuth.getCurrentUser().getUid());
        userMap.put("verified", "false");
        db.collection("users")
                .add(userMap)
                .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
                    @Override
                    public void onSuccess(DocumentReference documentReference) {

                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {

                    }
                });
    }

    private void SendUserToMainActivity() {
        Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);
        mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(mainIntent);
    }
}

1 Ответ

1 голос
/ 05 мая 2020

Вместо использования add().

add() просто добавит новый документ в коллекцию со случайным идентификатором.

Но когда вы предоставите метод Documentid и set. Он создает документ с текущим пользовательским uid и устанавливает данные для указанного c id.

Используйте set() и предоставляет идентификатор документа для firestore

db.collection("users").document(currentUserId)
    .set(userMap)
    .addOnSuccessListener(new OnSuccessListener<Void>() {
        @Override
        public void onSuccess(Void aVoid) {
            //Do what you want
        }
    })
    .addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {

        }
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...