现在,我正在进行一项活动,用户必须将他们的名字、姓氏和 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”时,它都会创建一个新文档并保存数据。
答案 0 :(得分:1)
您需要为每个用户生成一个唯一 ID 并将其输入到此行中:
db.collection("Users").document("uniqueUserId").set(data)
如果您使用 Firebase 身份验证,它会自动为每个用户生成这样一个唯一的用户 ID。但是由于您没有使用任何现有的用户管理 API(这很好),您需要自己生成 ID,将其与数据库中的用户关联,如上所示,还可能将其存储在本地存储中(例如SharedPreferences
) 以便在应用重新启动时能够恢复它。