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

时间:2018-09-15 12:33:41

标签: java android firebase listview firebase-realtime-database

我正在firebase中开发一个Android项目,需要在列表视图中显示所有用户的所有信息。(对于以下情况,我提供了图片,我的列表视图将具有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。我指的是教程,但它们不能解决我的问题。

1 个答案:

答案 0 :(得分:1)

使用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),但是它可以' t 显示所有用户的单个交易列表,因为您的数据库中没有该列表。

如果要使用后者,则需要创建自己的适配器,或者将所有用户的交易作为单个列表存储在数据库中。例如,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