【问题标题】:how to iterate through different key values which are generated randomly by firebase如何遍历由firebase随机生成的不同键值
【发布时间】:2018-11-05 17:55:30
【问题描述】:

这是我要遍历的数据结构 如您所见,用户有不同的用户,我可以轻松遍历它们,因为它们是在 firebase 身份验证期间生成的用户 ID,因此我可以访问它们,但现在我想遍历具有未知键值的事件节点,因为我使用 push 创建它们attenance 节点也是用 push 创建的,应该有多个值我应该如何在它们之间遍历

【问题讨论】:

  • ozxF ... igg1 代表什么,用户 ID?所以你想获取events节点下的所有event对象,这样对吗?
  • 是的,在用户节点下,所有用户都是使用他们的用户 ID 定义的,因此节点是使用用户 ID 的
  • 那很好。所以你想获取events节点下的所有事件对象,这样对吗?
  • 是的,我想得到每个对象

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


【解决方案1】:

要解决这个问题,有两种方法。如果您使用名为Event 的模型类向数据库添加数据,要取回数据,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference eventsRef = rootRef.child("users").child(uid).child("events");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            Event event = ds.getValue(Event.class);
            Log.d(TAG, event.getName());
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
eventsRef.addListenerForSingleValueEvent(valueEventListener);

第二种方法是使用 String 类,如以下代码行所示:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference eventsRef = rootRef.child("users").child(uid).child("events");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String name = ds.child("name").getValue(String.class);
            Log.d(TAG, name);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
eventsRef.addListenerForSingleValueEvent(valueEventListener);

在这两种情况下,logcat 中的输出都是:

Yoga Camp
Blood Donation Camp

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-22
    • 2015-01-22
    相关资源
    最近更新 更多