当前位置: 首页 > 知识库问答 >
问题:

android-向Firestore文档添加自定义ID

陈实
2023-03-14

我正在从事一个包含如下代码的项目:如何将具有自定义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\u id”是文档id,而不是Firestore生成的另一个id。

有人能帮忙吗?提前谢谢你。

共有1个答案

贾烨
2023-03-14

您正在onCreate的开头设置user\u id,可能是在EditText注册表用户名不包含任何文本时。这意味着无论此活动中发生什么,用户id始终为空。

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

 类似资料:
  • 我有一个自定义验证属性 假设我有一个实现ValidationAttory的HelloWorld类。然后我将此属性应用于我的API中的一个字段。 当我生成Swagger UI时,我得到一个JSON OpenAPI规范,模型显示每个字段的属性,如下所示: 如果我添加了一个必需的标记,如果我使用诸如RegularExpression/Range/StringLength之类的属性,则会显示一个星号,文本

  • 我有一些不应该实例化的带有自定义注释的类(抽象类,它只是实际bean的子组件)。但是在这些类之上,在运行时,在上下文初始化阶段,我想在应用程序上下文中添加额外的bean。 因此,基本上我需要扫描类路径,处理结果,并将新bean引入curent应用程序上下文。 似乎是spring-mvc、spring-tasks和spring-integration在做这件事(我试着从源代码中学习--没有运气) 我

  • 在我们仔细处理之后。我仍然无法获取自动生成的文档ID。没有“then”选项。我的代码: 创建后如何获取ID?

  • 搜索很好,它在工作,我正在过滤的交易类型(出售或出租)和房间数量在每个房地产。 但是我的JSON响应缺少很多字段,包括ACF。例如:{ “id”:149,“post_author”:“2”,“post_date”:“2016-03-03 23:53:39”,“post_date_gmt”:“2016-03-03 23:53:39”,“post_content”:“”post_title“:”opo

  • 我想添加“from”(date)来响应datepicker输入,但到目前为止,我有一些奇怪的行为。 我的代码: 到目前为止,我试过: 和 但这两种解决方案都将我的日期从“2020年9月14日16:43”转变为“从周一9月14 2020 17:19:38格林尼治标准时间0400(留尼汪岛)”,这是不必要的行为,因为我绝对想要法语日期。任何想法?谢啦

  • 我有一个用java编写的Maven JAX RS项目,使用enuncicate在每次构建时自动生成文档。到目前为止,它运行良好——他为我的项目中的所有RESTendpoint生成api文档。 现在我也用有用的jdoc写了一些util类——但是这些类不是endpoint——所以,expertion不会包括它们。 有没有办法告诉enunicate,他应该用一些额外类的jdoc生成额外的文档?我认为应该