在Android中从数组中的firebase获取数据

时间:2017-11-18 20:43:31

标签: android firebase firebase-realtime-database

我是Firebase的新手。我在firebase中有以下数据: enter image description here

在EventPlayer内部,我有关键eventID的数据数组。我想在Array中获取eventID的所有对象。

我的代码:

final String eventId=intent.getStringExtra("EventID");
    mref.child("EventPlayer").child(eventId).orderByChild("eventID").equalTo(eventId);
    // Attach a listener to read the data at our posts reference
    mref.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child : dataSnapshot.getChildren()) {
                EventRequest post = child.getValue(EventRequest.class);
                if(post != null){
                    System.out.println(post);
                    arrPlayers.add(post);
                }

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getCode());
        }
    });

帖子没有价值,而且是一个空类。

修改

创建arrraylist的代码:

arrPlayers = new ArrayList<EventRequest>();

2 个答案:

答案 0 :(得分:1)

试试这段代码。唯一的变化是在前几行中,使用postQuery变量。

final String eventId=intent.getStringExtra("EventID");
Query postQuery = mref.child("EventPlayer").child(eventId).orderByChild("eventID").equalTo(eventId);
    // Attach a listener to read the data at our posts reference
    postQuery.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for (DataSnapshot child : dataSnapshot.getChildren()) {
                EventRequest post = child.getValue(EventRequest.class);
                if(post != null){
                    System.out.println(post);
                    arrPlayers.add(post);
                }

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            System.out.println("The read failed: " + databaseError.getCode());
        }
    });

您的第二行代码会创建一个Query对象,但您永远不会将其分配给任何对象。将其分配给新变量,然后将ValueEventListener添加到该新变量可以获取您的数据。

答案 1 :(得分:0)

要获取所有这些事件ID,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference eventIdRef = rootRef.child("EventPlayer").child(eventId);
ValueEventListener eventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String eventID = ds.child("eventID").getValue(String.class);
            list.add(eventID);
            Log.d("TAG", eventID);
        }
        Log.d("TAG", list);
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
eventIdRef.addListenerForSingleValueEvent(eventListener);