[英]Android studio firebase database retrieve child value for multiple childs
[英]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.