为每个新用户创建新文档



现在,我正在进行一个活动,其中用户必须在EditText中输入他们的名、姓和id。他们输入的值被保存到firestoreconsole上。我的问题是:

我打开我的应用程序,用我的谷歌账户登录谷歌,我们称这个账户为我的主账户。我填充3个EditTexts,然后按下保存按钮,我命名为"btnnextstep"。(因为它的意思是把你带到表单的下一部分,但现在它是"保存";按钮)。一旦我按下保存键,我就可以在Google Firestore上看到我填写的数据。现在,如果我要登录同一设备上的另一个谷歌帐户,称其为我的辅助帐户,然后填写EditTexts。一旦我按下save,它就会覆盖主帐户的数据,而不是在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)中,以便能够在应用程序重新启动时恢复它。

最新更新