为每个新用户创建新文档

时间:2021-08-01 23:47:13

标签: java android firebase google-cloud-firestore

现在,我正在进行一项活动,用户必须将他们的名字、姓氏和 ID 输入到 EditText 中。他们在那里输入的值会保存到 Firestore 控制台中。这是我的问题:

我打开我的应用程序并使用我的 google 帐户登录 google,让我们将此帐户称为我的主要帐户。我填写了 3 个 EditText,然后按下我命名为“btnNextStep”的保存按钮(因为它的目的是将您带到表单的下一部分,但现在它是“保存”按钮)。按保存后,我可以在 Google Firestore 上看到我填写的数据。现在,如果我要在同一台设备上登录另一个 Google 帐户,请将其称为我的辅助帐户,然后填写 EditTexts。按保存后,它不会在 Firestore 中创建新文档,而是覆盖主帐户的数据。 Firestore 上的最终产品是它保存了来自辅助帐户的数据,但来自主帐户的数据现在消失了。

这是我的 .java 文件的代码,用于此活动:

package com.example.attenda_attempt3;

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

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.firestore.FirebaseFirestore;

import org.jetbrains.annotations.NotNull;

import java.util.HashMap;
import java.util.Map;

public class StudentInformationFormActivity extends AppCompatActivity {

    Button btnNextStep;
    EditText etFirstName;
    EditText etLastName;
    EditText etSchoolID;

    FirebaseFirestore db = FirebaseFirestore.getInstance();

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

        btnNextStep = findViewById(R.id.btnNextStep);
        etFirstName = findViewById(R.id.etFirstName);
        etLastName = findViewById(R.id.etLastName);
        etSchoolID = findViewById(R.id.etSchoolID);

        btnNextStep.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String firstName = etFirstName.getText().toString();
                String lastName = etLastName.getText().toString();
                String schoolID = etSchoolID.getText().toString();

                Map<String, Object> data = new HashMap<>();
                data.put("First Name", firstName);
                data.put("Last Name", lastName);
                data.put("School ID", schoolID);


                db.collection("Users").document("User Information").set(data)
                        .addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void unused) {
                                Toast.makeText(getApplicationContext(), "Saved", Toast.LENGTH_SHORT).show();
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull @NotNull Exception e) {
                                Toast.makeText(getApplicationContext(), "Error Occurred, Data Not Saved", Toast.LENGTH_SHORT).show();
                            }
                        });
            }
        });

    }
}

有人可以帮我做到这样,每次用户按下“btnNextStep”时,它都会创建一个新文档并保存数据。

1 个答案:

答案 0 :(得分:1)

您需要为每个用户生成一个唯一 ID 并将其输入到此行中:

db.collection("Users").document("uniqueUserId").set(data)

如果您使用 Firebase 身份验证,它会自动为每个用户生成这样一个唯一的用户 ID。但是由于您没有使用任何现有的用户管理 API(这很好),您需要自己生成 ID,将其与数据库中的用户关联,如上所示,还可能将其存储在本地存储中(例如SharedPreferences) 以便在应用重新启动时能够恢复它。