Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从Firebase数据库获取所有子节点列表值?_Android_Firebase_Firebase Realtime Database_Firebase Authentication - Fatal编程技术网

Android 如何从Firebase数据库获取所有子节点列表值?

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

这就是我的数据库的样子。每个用户都可以添加其存储在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());
    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(),然后,你可以用它们做任何你想做的事情。