繁体   English   中英

检索多个子分支Firebase

[英]Retrieve Multiple Child branches Firebase

好的,所以我让CardView容纳了一个数据库项(在这种情况下为足球运动员),并在RecyclerView中对其进行了修改。 我的Firebase数据库如下所示:

Players:
    |---Goalkeepers:
           |--GoalkeeperName
                     |--(And some other data fields)
    |---Defenders:
    |---Midfielders:
    |---Attackers

我的数据库参考如下所示:

playersDatabase = FirebaseDatabase.getInstance().getReference("Players").child("Goalkeepers");

如果我将引用保留为(“玩家”),它将为我提供4个空字段,分别代表守门员,后卫,中场和进攻者分支。 如何显示所有位置分支(如守门员,后卫,中场和进攻者)的所有数据?

还有没有什么办法可以在我的布局中以标题的形式组织所有球员,所以看起来像这样?

Goalkeepers(heading)
Goalkeeper1
Goalkeeper2
Defenders (heading)
Defender1
Defender2

这是来自实际应用程序的代码:

public class PlayerList extends AppCompatActivity {

private RecyclerView mPlayerList;
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference playersRef = rootRef.child("Players");





@Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_squad_list);
    //playersDatabase = FirebaseDatabase.getInstance().getReference("Players").child("Goalkeepers");
    playersRef.keepSynced(true);

    //new code
    ValueEventListener valueEventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String typeOfPlayer = ds.getKey();
                Log.d("TAG", typeOfPlayer);

                for(DataSnapshot dSnapshot : dataSnapshot.child(typeOfPlayer).getChildren()) {
                    String player = dSnapshot.getKey();
                    Log.d("TAG", "    " + player);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };
    playersRef.addListenerForSingleValueEvent(valueEventListener);




    mPlayerList = (RecyclerView) findViewById(R.id.my_recycle_view);
    mPlayerList.setHasFixedSize(true);
    mPlayerList.setLayoutManager(new LinearLayoutManager(this));



}



@Override
protected void onStart() {
    super.onStart();
    FirebaseRecyclerAdapter<Player, PlayerViewHolder>firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Player, PlayerViewHolder>(Player.class, R.layout.player_row, PlayerViewHolder.class, playersRef) {
        @Override
        protected void populateViewHolder(PlayerViewHolder viewHolder, Player model, int position) {

            viewHolder.setPlayerName(model.getPlayerName());
            viewHolder.setPlayerSurname(model.getPlayerSurname());
            viewHolder.setPlayerPosition(model.getPlayerPosition());

        }
    };


    mPlayerList.setAdapter(firebaseRecyclerAdapter);
}


public static class PlayerViewHolder extends RecyclerView.ViewHolder{

    View mView;
    public PlayerViewHolder(View itemView){
        super(itemView);
        mView = itemView;
    }

    public void setPlayerName (String playerName){
        TextView textViewName = (TextView) mView.findViewById(R.id.textViewName);
        textViewName.setText(playerName);
    }
    public void setPlayerSurname (String playerSurname){
        TextView textViewName = (TextView) mView.findViewById(R.id.textViewSurname);
        textViewName.setText(playerSurname);
    }
    public void setPlayerPosition (String playerPosition){
        TextView textViewName = (TextView) mView.findViewById(R.id.textViewPosition);
        textViewName.setText(playerPosition);
    }
}

}

任何帮助表示赞赏。 谢谢

按照以下数据库结构显示这些播放器:

Goalkeepers
    Goalkeeper1
    Goalkeeper2
Defenders
    Defender1
    Defender2 

请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference playersRef = rootRef.child("Players");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String typeOfPlayer = ds.getKey();
            Log.d("TAG", typeOfPlayer);

            DatabaseReference playerRef = playersRef.child(typeOfPlayer);
            ValueEventListener eventListener = new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    for(DataSnapshot dSnapshot : dataSnapshot.getChildren()) {
                        String player = dSnapshot.getKey();
                        Log.d("TAG", "    " + player);
                    }
                }

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

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
playersRef.addListenerForSingleValueEvent(valueEventListener);

编辑:

根据您编辑的帖子,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference playersRef = rootRef.child("Players");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String typeOfPlayer = ds.getKey();
            Log.d("TAG", typeOfPlayer);

            for(DataSnapshot dSnapshot : dataSnapshot.child(typeOfPlayer).getChildren()) {
                String player = dSnapshot.getKey();
                Log.d("TAG", "    " + player);
            }
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {}
};
playersRef.addListenerForSingleValueEvent(valueEventListener);

您的结果必须是:

Attackers
Defenders
Goalkeepers
    Goalkeeper1
Midfielders

试试这个代码..

    private void readData(){
    DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
    rootRef.child("Players").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {
                String typeOfPlayer = ds.getKey();
                Log.d("TAG", typeOfPlayer);

                for(DataSnapshot dSnapshot : dataSnapshot.child(typeOfPlayer).getChildren()) {
                    String player = dSnapshot.getKey();
                    Log.d("TAG", "    " + player);
                }
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

我希望将Internet权限添加到清单文件中。更多信息,请参见此链接https://www.simplifiedcoding.net/firebase-realtime-database-crud/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM