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

从Firebase检索数据,但snaptshop.get返回null

萧麒
2023-03-14

我对Firebase真的是个新手。我正在做一个使用firestore作为数据库的Android应用程序。我的问题是当我试图检查某个数据是否存在时。它总是说它没有。

这就是发生这种情况的方法。

private void usernameInDatabase(final String username){

        if (registration != null)
            registration.remove();

        registration = utilizadores.addSnapshotListener(new EventListener<DocumentSnapshot>() {
            @Override public void onEvent(@Nullable DocumentSnapshot snapshot,
                                          @Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.w("Utilizadores", "Listen failed.", e);
                    return;
                }
                if (snapshot != null && snapshot.exists()) {
                    Log.d("Utilizadores", snapshot.getData().toString());
                    Log.d("Utilizadores", username);
                    if (snapshot.get(username) == null) {
                        loginFormState.setValue(new LoginFormState(R.string.utilizadorNaoBaseDados, null));
                        utilizadorNaBaseDados = false;
                        Log.d("Utilizadores", "Not Database :(");
                    } else {
                        utilizadorNaBaseDados = true;
                        Log.d("Utilizadores", "base de dados ;D");
                    }
                } else {
                    Log.d("Utilizadores", "Current data: null");
                }
            }
        });
    }

如您所见,我在这里检查了可以从firestore检索的数据:

                    Log.d("Utilizadores", snapshot.getData().toString());
                    Log.d("Utilizadores", username);

这就是我对Utilizadores的定义。

  DocumentReference utilizadores = db.collection("Domum").document("Utilizador");

共有1个答案

毕魁
2023-03-14

要根据数据库的结构检查用户的存在,只需在Document.getData()返回的Map对象上使用contains()方法。因此在代码中应该如下所示:

utilizadores.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        if (task.isSuccessful()) {
            DocumentSnapshot document = task.getResult();
            if (document.exists()) {
                Map<String, Object> map = document.getData();
                if (map.containsKey("daniel@gmail.com")) {
                    Log.d(TAG, "User exists!");
                } else {
                    Log.d(TAG, "User does not exist!");
                }
            } else {
                Log.d(TAG, "No such document");
            }
        }
    }
});

如果您需要实时获取数据,那么您应该使用AddSnapshotListener(),方法与上面相同。

 类似资料:
  • 我试图从我的firebase数据库中检索数据,并在文本字段中打印一条语句,但我一直得到空值。我正在使用尝试到达我想要的子节点。我的textfield一直在说“欢迎null登录为null”我的Firebase数据库

  • 问题内容: 我正在法国学习,所以很难找到法语教程来解决我的问题。因此,我不得不问我的问题,希望有一个令人满意的解决方案。 我的问题是我在firebase上读取数据时遇到了麻烦,并且花了三天时间。 我有这样的结构: 我已经开始编写一些代码,可以恢复密钥,但是无法恢复这些值“ nom”,“ argent”等。 问题答案: John的替代方法是使用来获取每个属性:

  • 我花了几个小时来查找为什么我的代码没有从这个结构X:/中检索到文件“firstname”的原因 当我在debug中时,我可以看到Firebase检索与“firstname”相同级别的所有其他字段,但最后一个字段始终为null,即使它中有有效数据。 这是我创建FireStoreRecyclerOptions的行: 这是我的QueryFireStore: 而X类是一个POJO,包含以下数据结构:

  • 我正在两个标记之间画一条路线,我想保存那条路线。为此,我将包含lat和lng的ArrayList保存在Firebase数据库中。但我在取回航路点时遇到了问题。我是这样插入的: 在检索数据时,我尝试执行以下操作:

  • 我试图创建一个简单的程序,从用户的名字,手机号码和电子邮件地址,然后把数据在Firebase实时数据库。 有3个输入框和一个按钮,按一下就可以完成上面的操作。代码如下: 我这样设置了消防基地:

  • 我试图实现一对一聊天使用firebase实时数据库,我插入消息与senderid,Recieverid,消息,日期,sendername,Recievername,在我的情况下,不同的用户是不同的聊天室,我需要展示这个聊天室一对一聊天室我如何实现在我的android应用程序 下面是我检索数据的代码 但这段代码从聊天室获取所有数据,但我需要排除发送者名和接收者名相等的消息,sendername是从应