【问题标题】:I am unable to write data to Firebase Firestore我无法将数据写入 Firebase Firestore
【发布时间】:2020-01-26 11:44:35
【问题描述】:

关于为什么会发生的任何建议。

我用过下面提到的方式:

FirebaseFirestore dbFirestore;
dbFirestore  = FirebaseFirestore.getInstance();

在上传时我以这种方式使用它:

documentReference= dbFirestore.collection("CLIENT_DETAIL").document(mAuth.getUid());
documentReference.set(userData);

我无法在 Firestore 上编写它,我尝试了许多不同的可能性。

但是,有时它会在我尝试登录时写入,但在注册时执行代码时不会写入。当它写入时,即使在使用所有字段键调用后,我也无法读取它。

有什么建议吗??比如我为什么会发生,或者我是否需要在 GCP 有一个结算帐户。 请,任何人。这是我试图弄清楚的一天。

 mDocumentReferance.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            storeType= documentSnapshot.getString("STORE_TYPE");
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Log.i(TAG, "onFailure: unable to fetch the document");
        }
    });

它是读取它的代码,但它不起作用

这是 Task.isSuccessfull 上的代码

 if (task.isSuccessful()) {

                Log.i(TAG, "onComplete: creating folders based type ");
                OnAuth(task.getResult().getUser());
                sendEmailVerification();
                mAuth.signOut();
                SharedPreferences storeNamePreference= getSharedPreferences("UserDetails",MODE_PRIVATE);
                userData.put(RESTAURANT_UID,storeNamePreference.getString("UserUID",""));
                dbFirestore.collection("CLIENT_DETAIL").document(storeNamePreference.getString("UserUID","")).set(userData).addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Log.i(TAG, "onSuccess: Database referance is created");

                        mDialog.dismiss();
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Log.i(TAG, "onFailure: database referance is not created");
                    }
                });
                Intent intent = new Intent(SignupActivity.this, LoginActivity.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(intent);
            }

因为我已经在 SharedPreferences 中保存了用户 UID 值,所以我在那里调用它。 我在上面的代码中做错了吗?

我确实有用户 UID 的值。

【问题讨论】:

  • 我想创建用户注册成功的数据库。但是,在调试之后,我发现我能够从数据库中获取参考。问题是数据没有从 createUserWithEmailAndPassword() 方法内部上传
  • 我的意思是日志是 mDocumentReference.get().add().add();
  • 您是否启用了数据库中的规则以在用户通过身份验证时进行读写? ,您是否在清单中添加了互联网权限?
  • @GastónSaillén,是的,我添加了 Internet 用途。关于规则,我不太确定,但它保存为“allow read, write: if true;”。
  • 我已经在“ mAuth.createUserWithEmailAndPassword() ”方法中添加了创建 Firestore 数据库的代码,这样当用户成功注册时我就能够创建数据库,而这并没有发生。但是在调试时引用被正确调用,并且当我尝试登录而不是尝试注册时创建了 Forestore 数据库,并且我得到了 null 接受。

标签: java android firebase google-cloud-firestore


【解决方案1】:

您无法向 Firestore 发送数据,因为您向 Firestore 发送了虚假数据。您什么都不发送,只发送 UserUID 字段,没有任何信息:

userData.put(RESTAURANT_UID,storeNamePreference.getString("UserUID",""));

UserUID - 是您发送到 dB 的字段。 然后你写了“”——这是错误的,因为你发送的是空信息,你必须给出变量。

【讨论】:

  • 我的意思是当我调试时我可以看到变量。我已将方法称为“OnAuth(task.getResult().getUser());”在这里面我还调用了方法“OnAuth(FirebaseUser user)”,在里面我已经将用户 UID 传递给方法“createAnewUser(user.getUid())”,方法 createANewUser() 接受字符串值,它是用户 UID 和在这个方法中,我使用了 sharedpreferences 来存储用户 UID。
  • 由于在调用firestore之前我无法将值存储在字符串中,因为我们在documentReference中有多个文件夹的错误,所以我直接调用它。如果你愿意,我可以分享截图。
  • 请看我分享的截图,我可以看到值并存储了它。
  • 我已经使用不同的电子邮件运行了两次调试,因此屏幕截图上的 uid 值不同。
  • 我尝试将 dialog.dismis() 移动到创建 firestore 数据库的方法中,我看到 Dialog 没有被解雇,看起来该方法不起作用。我尝试将 documentReference 更改为“USER_DATA”字符串,但对话框仍然没有被关闭。 ???就像我在注册时使用内部 task.isSuccess 时该方法不起作用
【解决方案2】:

经过不断的编码,我发现在注册过程中无法调用“task.isSuccessfully”里面的Method。我所做的是为了在“mAuth.createUserWithEmailAndPassword()”方法之外获取 UserID,我已经初始化了 FirebaseUser 并调用了当前用户,并且我能够获取 UserID。但是 Firebase 需要大约 2 到 3 秒来加载 UserID,所以我添加了 ProgressBar,它最终构成了加载时间,并且我能够在 DocumentReference 上成功调用 UserID 引用。

这解决了我的问题。

但是,我只能在调试时获取 USERID,如果我运行我得到空引用。

【讨论】:

    【解决方案3】:

    如果要将 UserUID 设置为 Firestore 中的文档,请编写:

    FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();

    - 这个 currentUser 变量 - 是授权用户的 id,他在你的应用程序中的 id。

    然后写:
    dbFirestore.collection("CLIENT_LIST").document(currentUser.getUid()) .set(userData).addOnSuccessListener(new OnSuccessListener) .......

    -在这里您将用户 ID 作为 Firestore 文档发送。

    *它只有在你创建了 mAuth.createUserWithEmailAndPassword 方法时才有效,因为这样你的用户就会有他的唯一 id。

    【讨论】:

    • 是的,我这样做了,当我运行应用程序时我得到 null 但是如果我调试我能够获取值并保存。我试过了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2018-05-08
    • 2021-04-15
    • 2018-05-23
    • 2021-06-02
    • 1970-01-01
    相关资源
    最近更新 更多