java - 如何访问 Firebase 数据库的这些部分?

标签 java android firebase listview firebase-realtime-database

我正在开发一个 firebase项目Android我需要在 ListView 中显示所有用户的所有信息。(对于以下我提供图像的情况,我的 ListView 将有 4 个信息字段。)

enter image description here

但我不知道该怎么做。我不明白如何获取 database reference以下字段标记为绿色(在提供的图像中,对于用户 2,它将与用户 1 相同,只是我没有扩展节点)以及如何拥有循环结构做同样的事情。

顺便说一句,这就是我将数据输入 Firebase 数据库的方式:

MyActivity.java

private void sendUserData()
{
    FirebaseDatabase firebaseDatabase = FirebaseDatabase.getInstance();
    DatabaseReference databaseReference = firebaseDatabase.getReference(firebaseAuth.getUid()).child("Deals");

    UserProfile userProfile = new UserProfile(
        firebaseAuth.getUid(),
        name.getText().toString(),
        contact.getText().toString(),
        address.getText().toString(),
        startDate.getText().toString(),
        endDate.getText().toString()
    );

    databaseReference.child(formatter.format(date)).setValue(userProfile);
}

现在,我想要检索,但我不知道如何检索,因为我以前从未使用过 Firebase。我指的是教程,但它们不能解决我的问题。

最佳答案

使用 Firebase 时,如果您想显示某些内容的列表,则数据库中必须有这些内容的列表。因此,如果您想显示用户列表,则数据库中应该有一个用户列表(您确实这样做了)。这意味着您可以使用如下监听器轻松向所有用户显示:

DatabaseReference usersRef = FirebaseDatabase.getInstance().getReference();
usersRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
            System.out.println(userSnapshot.getKey());
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

您还可以在 onDataChange 中循环遍历每个用户的子节点:

public void onDataChange(DataSnapshot dataSnapshot) {
    for (DataSnapshot userSnapshot: dataSnapshot.getChildren()) {
        System.out.println(userSnapshot.getKey());
        for (DataSnapshot dealSnapshot: userSnapshot.child("Deals").getChildren()) {
            System.out.println(dealSnapshot.getKey());
        }
    }
}

您会注意到,我们现在使用两个嵌套循环,因为数据有两层深。

要在您的应用中显示数据,您需要将数据添加到适配器。对于许多用例,您可以使用 adapters from FirebaseUI ,它可以显示列表中的数据。例如,这可以与您的数据结构一起使用来显示用户列表。

但是,FirebaseUI 中的适配器要求您显示的数据位于单个列表中。因此它可以显示用户列表,它可以显示特定用户的交易列表(参见this question for an example),但它不能 显示所有用户的单一交易列表,因为您的数据库中没有该列表。

如果您想要执行后者,则您需要创建自己的适配器,或者需要将所有用户的交易作为单个列表存储在数据库中。例如,FirebaseUI 适配器可以显示具有以下结构的 Deals:

Deals
    deal1id: { user: "userId1", ... }
    deal2id: { user: "userId2", ... }
    deal3id: { user: "userId1", ... }
    deal4id: { user: "userId2", ... }
UserDeals
    userId1
        deal1id: true
        deal3id: true
    userId2
        deal2id: true
        deal4id: true

关于java - 如何访问 Firebase 数据库的这些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52344725/

相关文章:

java - 有什么方法可以保存显示从 url 检索到的图像的 imageView 的状态吗?

android - ActionBarSherlock 和 3.0 之前的 Android 设备

android - 如何以编程方式设置 textView 的样式?

javascript - 使用 Firebase admin sdk 和云功能的 FCM 错误

swift - handleOpenURL,第二个参数(sourceApplication)使用什么值?

java - 如何在java SWING面板中添加Scrollable(滚动条组件)复选框?

Java:Spring 框架:声明嵌套映射

java - Twitter4j 推文被修剪

Android:如何使 LinearLayout 中的所有元素大小相同?

ios - 通过 Swift 中一个键的多个值过滤 Firebase 结果