簡體   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