微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为每个新用户创建新文档

如何解决为每个新用户创建新文档

现在,我正在进行一项活动,用户必须将他们的名字、姓氏和 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”时,它都会创建一个新文档并保存数据。

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?