Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.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
从Firebase实时数据库、Android Studio、Java获取数据_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

从Firebase实时数据库、Android Studio、Java获取数据

从Firebase实时数据库、Android Studio、Java获取数据,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在寻找一种方法,以数组[]或字符串等格式从firebase实时数据库获取数据 我的数据库如下所示: 或: 数据库 | -->使用者 | -->UID1 -->UID2 这是数据库的根目录 我想获得“用户”子项中所有UID的列表。 这是我到目前为止掌握的代码,我有点迷糊了: DatabaseReference-DatabaseReference=firebaseDatabase.getReference(“用户”); databaseReference.addValueEventListen

我正在寻找一种方法,以数组[]或字符串等格式从firebase实时数据库获取数据

我的数据库如下所示:

或:
数据库
|
-->使用者
|
-->UID1
-->UID2

这是数据库的根目录 我想获得“用户”子项中所有UID的列表。 这是我到目前为止掌握的代码,我有点迷糊了:

DatabaseReference-DatabaseReference=firebaseDatabase.getReference(“用户”);
databaseReference.addValueEventListener(
新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
String UIDs=dataSnapshot.getValue(String.class);
}
@凌驾
已取消的公共void(DatabaseError DatabaseError){
}
});
谈到java、android studio和firebase,我有点像新手。我试图以我知道如何使用的格式获取数据,如字符串或字符串数组[]。我环顾四周,看是否有其他人问过同样的问题,但我可以得到这些问题的答案,但我不理解他们。 提前感谢您的时间

您可以尝试以下方法:

DatabaseReference ref= 
FirebaseDatabase.getInstance().getReference("Users");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        int i = 0;
        for(DataSnapshot d : dataSnapshot.getChildren()) {
            name[i] = d.getKey();
            i++;
        }
    }
}//onDataChange

@Override
public void onCancelled(DatabaseError error) {

}//onCancelled
});

name[]是一个字符串数组

对于您的上述问题,我将给出两种方法:ArrayList或带分隔符的字符串

ArrayList<String> uids = new ArrayList<String>();

FirebaseDatabase.getInstance().getReference("Users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    if (dataSnapshot.exists()) {
        for(DataSnapshot snapshot : dataSnapshot.getChildren()) {
            uids.add(snapshot.getKey());
        }
    }
}

@Override
public void onCancelled(DatabaseError error) {

}
});

这将提供一个输出,例如:uid1、uid2、uid3、…uidn、

要获取UID的列表,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("Users");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String uid = ds.getKey();
            list.add(uid);
        }

        //Do what you need to do with your list
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
usersRef.addListenerForSingleValueEvent(valueEventListener);
DatabaseReference rootRef=FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef=rootRef.child(“用户”);
ValueEventListener ValueEventListener=新的ValueEventListener(){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
列表=新的ArrayList();
对于(DataSnapshot ds:DataSnapshot.getChildren()){
字符串uid=ds.getKey();
添加(uid);
}
//用你的列表做你需要做的事情
}
@凌驾
已取消的公共void(@NonNull DatabaseError DatabaseError){
Log.d(标记,databaseError.getMessage());//不要忽略错误!
}
};
usersRef.addListenerForSingleValueEvent(valueEventListener);

我建议您仅在回调中使用该列表,否则它将为空。如果您想在
onDataChange()
方法之外使用它,我建议您查看我的anwser的最后一部分,我在其中解释了如何使用自定义回调。您还可以查看此以更好地理解。

下次,如果您想客观,请尝试查看谁先回答,谁复制了答案。。。
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference usersRef = rootRef.child("Users");
ValueEventListener valueEventListener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        List<String> list = new ArrayList<>();
        for(DataSnapshot ds : dataSnapshot.getChildren()) {
            String uid = ds.getKey();
            list.add(uid);
        }

        //Do what you need to do with your list
    }

    @Override
    public void onCancelled(@NonNull DatabaseError databaseError) {
        Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
    }
};
usersRef.addListenerForSingleValueEvent(valueEventListener);