如何迭代由Firebase随机生成的不同键值

时间:2018-11-05 17:55:31

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

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

1 个答案:

答案 0 :(得分: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