当前位置: 首页 > 知识库问答 >
问题:

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

班展
2023-03-14

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

我的数据库如下所示:链接到数据库的图像

或者:数据库|--

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

DatabaseReference databaseReference = firebaseDatabase.getReference("Users");
        databaseReference.addValueEventListener(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        String UIDs = dataSnapshot.getValue(String.class);
                    }

                    @Override
                    public void onCancelled(DatabaseError databaseError) {
                    }
                });

谈到java、android studio和firebase,我有点像新手。我试图以我知道如何使用的格式获取数据,如字符串或字符串数组[]。我环顾四周,看是否有其他人问过同样的问题,但我可以得到这些问题的答案,但我不理解他们。提前感谢您的时间!


共有3个答案

闾丘文昌
2023-03-14

你可以试试这个:

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[]是一个字符串数组!

宇文念
2023-03-14

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

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) {

}
});

对于字符串

字符串uids=“”;

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

    @Override
    public void onCancelled(DatabaseError error) {

    }
    });

这将给出一个输出,例如:uid1,uid2,uid3,...... uidn,

杜俊楚
2023-03-14

要获取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);

我建议您仅在回调中使用该列表,否则它将为空。如果您想在onDataChange()方法之外使用它,我建议您参阅本文anwser的最后一部分,其中我已经解释了如何使用自定义回调来完成。为了更好地理解,你也可以看一下这个视频。

 类似资料:
  • 我正在尝试获取我的用户名,并在应用程序打开时向他/她问好。但我无法根据某个用户的uid获取数据。当我运行应用程序时,祝酒词从未真正出现。 数据库结构 密码

  • 我已经花了几个小时阅读产品分支中的0和1。请在Firebase数据库有经验的人帮助我:(

  • 我有一个带有此模式的数据库: 我测试了这段代码,但我无法从数据库中获得任何消息。我会感谢你的帮助。

  • 我想从Firebase实时数据库中获取整个JSON数组。从实时数据库中提取数组并将其存储在自定义类的ArrayList中。

  • 我真的很难从数据库中收集数据。我正在使用实时数据库,我正在将这些值添加到一个可以单击的列表中。 当我单击列表上的用户时,我需要获取用户名值来创建聊天ID。这是我的问题,以获得键内的值。我现在的做法似乎行不通。 这是我的数据库 我需要取给“name”的值。 这是我的密码

  • 我试图在我的应用程序中创建一个搜索功能,它基本上根据用户的查询(如任何产品名称)过滤json数据(如产品列表),并显示最接近的结果。我已经成功实现了这个搜索栏和过滤逻辑,但它是在我的应用程序中我的产品列表的本地json数据上工作的。我想要的是从网络调用(http调用)中获取json数据,然后进行过滤。但是我的实时数据库中有数据,我不知道如何以json格式检索它们。我可以设置云函数(节点js)来将j