java - android - 向 Firestore 文档添加自定义 ID
问题描述
我正在开发一个包含类似这样代码的项目:如何将具有自定义 ID 的文档添加到 firestore (Angular)
当我要尝试该应用程序时,它总是崩溃。但是代码都是一样的。
我在 LogCat 中得到的错误是这样的:
无效的文档参考。文档引用必须有偶数个段,但用户有 1
我的完整代码是这样的:
public class RegisterActivity extends AppCompatActivity {
private EditText registerUsername;
private EditText registerEmail;
private EditText registerPassword;
private EditText registerConfirmPassword;
private Button registerRegisterButton;
private Button registerLoginButton;
private ProgressBar registerProgressBar;
private FirebaseFirestore firebaseFirestore;
private String user_id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_register);
registerUsername = findViewById(R.id.register_username);
registerEmail = findViewById(R.id.register_email);
registerPassword = findViewById(R.id.register_password);
registerConfirmPassword = findViewById(R.id.register_confirm_password);
registerRegisterButton = findViewById(R.id.register_register_button);
registerLoginButton = findViewById(R.id.register_login_button);
registerProgressBar = findViewById(R.id.register_progressBar);
firebaseFirestore = FirebaseFirestore.getInstance();
user_id = registerUsername.getText().toString();
registerLoginButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent loginIntent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(loginIntent);
}
});
registerRegisterButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String username = registerUsername.getText().toString();
String email = registerEmail.getText().toString();
String password = registerPassword.getText().toString();
String confirmPassword = registerConfirmPassword.getText().toString();
if (!TextUtils.isEmpty(username) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password) && !TextUtils.isEmpty(confirmPassword)) {
if (password.equals(confirmPassword)) {
registerProgressBar.setVisibility(View.VISIBLE);
Map<String, String> usersMap = new HashMap<>();
usersMap.put("username", username);
usersMap.put("email", email);
usersMap.put("password", password);
firebaseFirestore.collection("Users").document(user_id).set(usersMap).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toasty.success(RegisterActivity.this, "Successfully Registered", Toast.LENGTH_SHORT).show();
Intent loginIntent = new Intent(RegisterActivity.this, LoginActivity.class);
startActivity(loginIntent);
registerProgressBar.setVisibility(View.INVISIBLE);
}
});
} else {
Toasty.error(RegisterActivity.this, "Passwords Don't Match", Toast.LENGTH_SHORT).show();
}
}
}
});
}}
我希望“user_id”是文档 ID,而不是 Firestore 生成的另一个 ID。
有人可以帮忙吗?并提前致谢。
解决方案
您在user_id
onCreate 开始时进行设置,可能是在 EditTextregisterUsername
不包含任何文本时。user_id
无论此活动中发生什么,这意味着将始终为空。
您不能将空字符串传递给document()
. 您需要一个实际的字符串值,它也是一个有效的 Firestore 文档 ID。registerUsername
在他们填写表格之后尝试获取字符串值,而不是之前。
推荐阅读
- python - 由于 FileNotFoundError 无法启动 Spyder
- javascript - 使用 express 时找不到模块
- javascript - 运行“setState”的反应映射函数没有更新组件
- stripe-payments - Stripe - 是否可以将来源重新附加到不同的客户?
- java - 我的初学者代码有什么问题?
- machine-learning - 多训练集 LSTM RNN
- php - CodeIgniter - “发生数据库错误”(控制器/Login.php)
- php - 将结果包装在表中
- matplotlib - Matplotlib subplot2grid 在设置 gridspec_kw width_ratios 时移除子图
- python - 如何在 Python 3 中正确包装字典?