我无法将数据写入Firebase Firestore

时间:2020-01-26 11:44:35

标签: java android firebase google-cloud-firestore

有关发生原因的任何建议。

我以下述方式使用了

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);
            }

由于我已经将User UID值保存在SharedPreferances中,因此我在那儿调用它。 我在上面的代码中做错了吗?

enter image description here

enter image description here

我确实具有“用户UID”的值。

3 个答案:

答案 0 :(得分:1)

您无法将数据发送到Firestore,因为您将错误的数据发送到Firestore。您什么也没有发送,仅发送UserUID字段,没有任何信息:

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

UserUID-是您要发送到dB的字段。 然后,您输入“”-这是错误的,因为您要发送空白信息,因此必须提供变量。

答案 1 :(得分:0)

在进行连续编码之后,我发现在注册期间无法在“ task.isSuccessfully”内部调用Method。我所做的是,为了在“ mAuth.createUserWithEmailAndPassword()”方法之外获取用户标识,我已经初始化了FirebaseUser并调用了当前用户,并且能够获取用户标识。但是Firebase大约需要2到3秒钟来加载UserID,因此我添加了ProgressBar,该加载栏最终弥补了加载时间,并且我能够在DocumentReference上成功调用UserID参考。

解决了我的问题。

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

答案 2 :(得分:0)

如果要将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。