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

从Firebase数据库读取数据

庾君博
2023-03-14

我试图从Firebase数据库中读取数据,我已经到处阅读和查找,但我已经走到了死胡同。

这就是我所做的一切。

依赖项:

实现'com.google.firebase: Firebase存储: 9.2.1'

实现'com.google.firebase:firebase数据库:9.2。1'

实现'com.google.firebase:firebase授权:9.2。1'

实现'com.google.火基:火基核心:9.2。1'

中文版本:15

DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();

然后在一个Button onClark方法中,我把监听器:

mDatabase.child("List").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                String savedData = dataSnapshot.getValue(String.class);
                Log.d(TAG, "snapshot: " + savedData);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Log.d(TAG, "Error");
            }
    });

下面是数据库的介绍。

会感激你的投入。

共有1个答案

苍嘉澍
2023-03-14

您正试图读取List下的String值。但是在列表下面没有字符串值,而是有一个对象列表。要获得实际值,您需要在代码中导航JSON结构。

类似的东西:

DatabaseReference mDatabase;
mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("List").addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        for (DataSnapshot tierSnapshot: dataSnapshot.getChildren()) {
            Log.d(TAG, tierSnapshot.getKey(); // "Tier 1", "Tier 1 B"
            for (DataSnapshot secondSnapshot: tierSnapshot.getChildren()) {
                Log.d(TAG, secondSnapshot.getKey(); // "Tier 2", "Tier 2 B"

                String str = secondSnapshot.getValue(String.class);
                Log.d(TAG, str); // null, "2 B"

                Long num = secondSnapshot.getValue(long.class);
                Log.d(TAG, num); // 2, null

            }
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.w(TAG, "Error", databaseError);
    }
});

另外需要注意的是,您的值是不同类型的,第一个是数字2,而第二个是字符串"2 B"。因此有两个getValue()调用,以获取特定类型。您也可以只执行第二个napshot.getValue(),并像往常一样处理结果对象(例如调用toString())。

 类似资料:
  • 我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

  • 因此,我尝试拍摄数据库的快照,并添加带有子项的数组字符串中的项。 我的set和get java文件如下所示 但是,当我的程序到达dataQuery方法并尝试获取和设置名称和成分时,它会崩溃。有人能解释一下我做错了什么,以及是否有更好的方法来使用数据库快照来做到这一点吗? 进程:in.tvac.akshayejh.firebasesearch,PID:24798java.lang.NullPoint

  • 我正在尝试读取我的Flutter应用程序中的firebase实时数据库中的数据,并将其分配给模型类,但是,我在控制台中得到了以下错误。 下面是我到目前为止所做的代码 员工类别 我不知道我做错了什么,请帮我解决这个问题

  • 一切正常,但DatabaseReference无法获取数据,这就像是忽略了我的代码运行,就像我的internet无法运行一样,请帮助我,我是这个社区的新手,下面是我的代码和图片。 以前它是工作的,但由于我只是更改了一些代码,使只有currentVersion>=vCode,这样即使数据库中的值是 firebase数据库映像 mainactivity.java manifest.xml 依赖关系

  • 主要内容:示例在本章中,我们将演示如何读取Firebase数据。 下图显示了想要读取的数据 - 可以使用方法来检索数据。 此方法将事件类型作为“值”,然后检索数据的快照。 当我们将方法添加到快照时,将获得数据的JavaScript表示形式。 示例 下面来看看一个例子。 如果运行下面的代码,浏览器的控制台将显示以下数据。 在下一章中,我们将学习可用于读取数据的其他事件类型。

  • 我遇到的问题是,使用下面显示的以下Firebase规则,经过身份验证的用户可以成功写入数据库,但无法从中读取,因为我在控制台中获得了“拒绝权限”。当我将读取和写入设置为true(公共)时,读取和写入功能都正常工作。我从数据库中读取的代码也显示如下: 规则: 示例数据库: 以下是确切的错误: