首页 > 解决方案 > 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。

有人可以帮忙吗?并提前致谢。

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


您在user_idonCreate 开始时进行设置,可能是在 EditTextregisterUsername不包含任何文本时。user_id无论此活动中发生什么,这意味着将始终为空。

您不能将空字符串传递给document(). 您需要一个实际的字符串值,它也是一个有效的 Firestore 文档 IDregisterUsername在他们填写表格之后尝试获取字符串值,而不是之前。


推荐阅读