Android 如何从Firebase数据库获取所有子节点列表值?
这就是我的数据库的样子。每个用户都可以添加其存储在userId/My players/path中的3名最佳玩家,如下图所示:Android 如何从Firebase数据库获取所有子节点列表值?,android,firebase,firebase-realtime-database,firebase-authentication,Android,Firebase,Firebase Realtime Database,Firebase Authentication,这就是我的数据库的样子。每个用户都可以添加其存储在userId/My players/path中的3名最佳玩家,如下图所示: List<String> list = new ArrayList<>(); list.add(first.getText().toString()); list.add(second.getText().toString()); list.add(third.getText().toString()); Playe
List<String> list = new ArrayList<>();
list.add(first.getText().toString());
list.add(second.getText().toString());
list.add(third.getText().toString());
Players players = new Players(list);
Map<String, Object> map = new HashMap<>();
map.put("Best Players", players);
FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
FirebaseDatabase database = FirebaseDatabase.getInstance();
if (user != null) {
DatabaseReference myRef = database.getReference().child("Users").child(user.getUid()).child("My Players");
myRef.setValue(map);
}
List List=new ArrayList();
添加(first.getText().toString());
添加(second.getText().toString());
add(third.getText().toString());
玩家=新玩家(列表);
Map Map=newhashmap();
地图放置(“最佳玩家”,玩家);
FirebaseUser=FirebaseAuth.getInstance().getCurrentUser();
FirebaseDatabase=FirebaseDatabase.getInstance();
如果(用户!=null){
DatabaseReference myRef=database.getReference().child(“用户”).child(user.getUid()).child(“我的玩家”);
myRef.setValue(映射);
}
Player对象包含带有3个字符串对象的ArrayList。所以,我想检查数据库中的所有用户,并从其最佳玩家列表中搜索每个用户的第0位、第1位或第2位玩家。有什么建议吗?要显示这些列表,请使用以下代码:
ListView listView = (ListView) findViewById(R.id.list_view);
ArrayList arrayList = new ArrayList<>();
DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("Users").child(userId).child("My Players").child("Best Players").child("list");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) dataSnapshot.getValue();
String firstList = (String) map.get("0");
String secondList = (String) map.get("1");
String thirdList = (String) map.get("2");
arrayList.add(firstList + ", " + secondList + ", " + thirdList);
arrayAdapter = new ArrayAdapter<>(this, R.layout.list, arrayList);
listView.setAdapter(arrayAdapter);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
ref.addListenerForSingleValueEvent(eventListener);
ListView ListView=(ListView)findViewById(R.id.list\u视图);
ArrayList ArrayList=新的ArrayList();
DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child(“用户”).child(用户ID).child(“我的玩家”).child(“最佳玩家”).child(“列表”);
ValueEventListener eventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
@抑制警告(“未选中”)
Map Map=(Map)dataSnapshot.getValue();
String firstList=(String)map.get(“0”);
String secondList=(String)map.get(“1”);
String thirdList=(String)map.get(“2”);
arrayList.add(firstList+”、“+secondList+”、“+thirdList);
arrayAdapter=新的arrayAdapter(this,R.layout.list,arrayList);
setAdapter(arrayAdapter);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){}
};
参考AddListener for SingleValueEvent(eventListener);
您可以使用下面给出的代码:根据您的数据库更改参数
databaseReference.child(Table_Dashboard).orderByChild("title").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
spin = new ArrayList<String>();
// spin.add("Dashboard");
for (DataSnapshot spinnerSnapshot : dataSnapshot.getChildren()) {
String areaName = spinnerSnapshot.child("title").getValue(String.class);
spin.add(areaName);
}
// spin.remove("Family Details");
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(Dashboard.this, android.R.layout.simple_spinner_item,
spin);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerAdapter);
dismissprogress();
}
@Override
public void onCancelled(DatabaseError databaseError) {
dismissprogress();
}
});
databaseReference.child(Table_Dashboard).orderByChild(“title”).addValueEventListener(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
spin=newarraylist();
//添加(“仪表板”);
对于(DataSnapshot spinnerSnapshot:DataSnapshot.getChildren()){
String areaName=spinnerSnapshot.child(“title”).getValue(String.class);
添加(域名);
}
//旋转。移除(“家庭详细信息”);
ArrayAdapter spinnerAdapter=新的ArrayAdapter(Dashboard.this,android.R.layout.simple\u微调器\u项,
旋转);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple\u微调器\u下拉菜单\u项);
spinner.setAdapter(spinnerAdapter);
解雇进度();
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
解雇进度();
}
});
您想用这些列表做什么?您想在列表视图中显示它们吗?
?是的,想法是第0个元素将是用户的最佳播放器,因此,例如,我想显示所有第0个元素,这样我就可以从所有用户中看到谁是最佳播放器。如果不工作,我会得到以下错误:com.google.firebase.database.DatabaseException:不支持序列化集合,请改用列表。请改为将数据添加到Firebase数据库的模式<代码>地图放置(“最佳玩家”,玩家)是错误的,因为players
是ArrayList
而不是Map
。使用映射更改列表
。这会解决你的问题。这很有帮助!但我仍然只从登录用户处获取数据。。因为我必须在数据库路径中输入userId。。有没有办法绕过它,从所有用户那里获取数据?很高兴我能提供帮助。在这种情况下,你可以随意接受我的回答。关于你的最后一个问题,当你使用push()方法来生成那些唯一的kesy时,你可以得到这样的键:String userId=ref.getKey(),然后,你可以用它们做任何你想做的事情。