从Firebase实时数据库、Android Studio、Java获取数据
我正在寻找一种方法,以数组[]或字符串等格式从firebase实时数据库获取数据 我的数据库如下所示: 或:从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
数据库
|
-->使用者
|
-->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);