【问题标题】:Android studio + Firebase - Cannot Write dataAndroid studio + Firebase - 无法写入数据
【发布时间】:2021-03-22 10:05:15
【问题描述】:

我正在尝试将有关用户集合中注册用户的数据写入我的 Cloud Firestone, 当然它必须与授权中的 UID 代码相关联(注册/登录系统正常工作并在我的 Firebase 中编写身份验证)。

XML 注册按钮:

<Button
    android:id="@+id/RegisterBtn"
    android:layout_width="0dp"
    android:layout_height="51dp"
    android:layout_marginStart="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="92dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"
    android:text="REGISTER"
    app:backgroundTint="#870404"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/Password" />

JAVA 注册:

...
FirebaseFirestore database;
String userID;
...

database = FirebaseFirestore.getInstance();

mRegisterBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String name = mFullName.getText().toString().trim();
                String email = mEmail.getText().toString().trim();
                String password = mPassword.getText().toString().trim();
                String confirmPassword = mconfirmPassword.getText().toString().trim();

...

//REGISTER THE USER
                fAuth.createUserWithEmailAndPassword(email,password).addOnSuccessListener(new OnSuccessListener<AuthResult>() {
                    @Override
                    public void onSuccess(AuthResult authResult) {
                        startActivity(new Intent(getApplicationContext(),MainActivity.class));
                        finish();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Register.this, "Error!" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });

                //FIRECLOUD INSERT DATA
                //GET ID FROM AUTH
                userID = fAuth.getCurrentUser().getUid();
                saveOnFireCloud(userID,name,email);


            }
        });

...

 private void saveOnFireCloud(String userID, String name, String email) {
        Map<String,Object> mappa = new HashMap<>();
        mappa.put("id",userID);
        mappa.put("name",name);
        mappa.put("email",email);
        database.collection("Users").document(userID).set(mappa)
                .addOnCompleteListener(new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Toast.makeText(Register.this, "Data Inserted!", Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Register.this, "Error Inserting Data!" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }

在 Cloud Firestone 中,我刚刚创建了集合用户。 我注意到在 Tool>Firebase>Firestone Cloud 中告诉我: 将您的应用连接到 Firebase

  • ✓ 已连接

但即使我已经点击并且看起来构建正确, 底部的“将 Cloud Firestone 添加到您的应用程序”按钮仍然出现,而不是 ✓

我是否制定了以正确方式链接 UID 的步骤? 当我点击注册按钮时,在运行时没有收到任何错误,创建了 Auth 用户,但用户数据保持空白......我真的很生气,我只是卡在这一步!

提前感谢您的回答!!

编辑:

非常感谢您的回答,弗兰克。 是的,如果我在里面设置断点: private void saveOnFireCloud(String userID, String name, String email):

这是该行的结果: database.collection("Users").document(userID).set(mappa):

this = { Register@17322 } 
userID = "YVI9zPC2VJbpd4JpMCeBOZNDsbD2" 
name = "a" email = "test@gmail.com" 
mappa = {HashMap@17356} 
size = 3 
database = {FirebaseFirestone@17357} 

但是如果我设置2个断点

public void onComplete(@NonNull Task<Void> task) { and public void onFailure(@NonNull Exception e) 

调试跳过...数据未写入..

【问题讨论】:

  • 如果您在saveOnFireCloud 内的第一行设置断点并在调试器中运行,变量是否具有您期望的值?
  • 请不要在评论中转储该信息,否则会变得不可读。相反,请编辑您的问题(其下方有一个链接)以包含其他信息并进行标记。
  • 请注意,该数据库称为 Firestore,而不是您一直说的 Firestone。因此,您的输出中的 FirebaseFirestone@17357 似乎不太可能。

标签: android google-cloud-firestore firebase-authentication registration


【解决方案1】:

我通过替换方法解决了:

database.collection("Users").document(userID).set(mappa)

用方法:

database.collection("Users").add(mappa)

似乎 .set(Hashmap) 方法可以仅用于替换现有对象, 相反,方法 .add(Hashmap) 将对象添加到数据库中。我在集合中正确插入了记录。

顺便说一句,现在我又被这个问题困住了,我尝试再次测试它,现在没有在 FirebaseCloud 中插入数据。 当我单击继续时,没有任何反应!只是在控制台“框架不可用”

已解决的 2.0: 看来Android studio 有cash 的bug,要解决,取消C:\Users\PIDIOTTO\AppData\Roaming\Google 中的AndroidStudio 文件夹,重启Android Studio! :)

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 2018-05-08
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多