GVKun编程网logo

如何在 Firebase 中获取所有子密钥?(firebase使用)

10

在这篇文章中,我们将为您详细介绍如何在Firebase中获取所有子密钥?的内容,并且讨论关于firebase使用的相关问题。此外,我们还会涉及一些关于android–如何从firebase中的值获取密

在这篇文章中,我们将为您详细介绍如何在 Firebase 中获取所有子密钥?的内容,并且讨论关于firebase使用的相关问题。此外,我们还会涉及一些关于android – 如何从firebase中的值获取密钥、android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI、android – 如何获取所有孩子的数据在firebase数据库?、Firebase Firestore从集合中获取数据的知识,以帮助您更全面地了解这个主题。

本文目录一览:

如何在 Firebase 中获取所有子密钥?(firebase使用)

如何在 Firebase 中获取所有子密钥?(firebase使用)

使用 Firebase 的浅查询 https://firebase.google.com/docs/database/rest/retrieve-data#shallow

例如,如果您的数据结构如下

parent: {
  child_0: {...<large data>...},child_1: {...<large data>...},child_2: "abc",child_3: 123
}

浅查询的结果将是:

parent: {
  child_0: true,child_1: true,child_3: 123
}
,

某些意外错误可能会发送 cancel 事件并终止连接。在为此事件提供的数据中描述了原因。一些潜在原因如下: 1. Firebase 实时数据库规则不再允许在请求的位置读取。此原因的 data 描述是“权限被拒绝”。 2. 一次写入触发了一个事件流送器,它发送了一个超过我们的限制 512MB 的大型 JSON 树。此原因的 data 是“指定的有效负载太大,请请求数据较少的位置。”

由于实时数据库仅限制每个请求 500Mb,因此为了执行此请求,您应该尝试使用 child_added listener 分页查询或尝试迭代子项,而不是查询所有子项。

android – 如何从firebase中的值获取密钥

android – 如何从firebase中的值获取密钥

当我知道Firebase中的以下结构中的“name”字段包含“efg”时,如何获取密钥“-KLpcURDV68BcbAvlPFy”.

clubs
    -KLpcURDV68BcbAvlPFy
        dept: "abc"
        desc: "xyz"
        name: "efg"
    -asdasdasddsad
        dept: "asda"
        desc: "asd"
        name: "adddd"

我尝试了这个,但它返回了“俱乐部”

mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String clubkey =dataSnapshot.getKey();

解决方法:

那是因为你正在使用ValueEventListener.如果查询匹配多个子节点,则返回所有这些子节点的列表.即使只有一个匹配的孩子,它仍然是一个列表.由于您在该列表上调用了getKey(),因此您将获得运行查询的位置的键.

要获取匹配子项的键,请遍历快照的子项:

mDatabase.child("clubs")
         .orderByChild("name")
         .equalTo("efg")
         .addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            String clubkey = childSnapshot.getKey();

但请注意,如果您认为俱乐部名称是唯一的,您可以将俱乐部存储在他们的名下,并在没有查询的情况下访问正确的俱乐部:

mDatabase.child("clubs")
         .child("efg")
         .addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        String clubkey = dataSnapshot.getKey(); // will be efg

android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI

android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI

在firebaseui中继承Firebaselistadapter时,如何获取单击项目的obj键?

Firebaselistadapter具有以下获取itemId的方法,但返回long.但我需要使用默认字符串格式的对象键.

public long getItemId(int i) {
    return (long)this.mSnapshots.getItem(i).getKey().hashCode();
}

解决方法:

Firebaselistadapter假定您始终知道要与之交互的项目的索引/位置.鉴于Android上下文这是有道理的,因为集合视图是基于索引的.

知道该位置后,可以调用adapter.getRef(position)以获取对象的Firebase引用.在该引用上,您可以调用getKey()来获取密钥.虽然我建议只做这个作为最后的手段.

android – 如何获取所有孩子的数据在firebase数据库?

android – 如何获取所有孩子的数据在firebase数据库?

我有这个firebase数据库

我需要收到用户的所有电话号码,我应该使用哪个听众来收集所有的孩子?

每个用户被添加为一个对象,用户ID作为该对象的名称,我需要检索这个对象,而不知道用户ID

我搜索的文档,它与DataSnapshot相关,但我无法得到没有监听器的DataSnapshot!寻求DataSnapshout是正确的,还是使用别的东西

解决方法

首先检索您的用户数据快照.
//Get datasnapshot at your "users" root node
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users");
    ref.addListenerForSingleValueEvent(
            new ValueEventListener() {
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
                    //Get map of users in datasnapshot
                    collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue());
                }

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

然后循环访问用户,访问他们的地图并收集电话字段.

private void collectPhoneNumbers(Map<String,Object> users) {

    ArrayList<Long> phoneNumbers = new ArrayList<>();

    //iterate through each user,ignoring their UID
    for (Map.Entry<String,Object> entry : users.entrySet()){

        //Get user map
        Map singleUser = (Map) entry.getValue();
        //Get phone field and append to list
        phoneNumbers.add((Long) singleUser.get("phone"));
    }

    System.out.println(phoneNumbers.toString());
}

这个监听器只有在显式调用时才会检索数据捕获.考虑除了您的用户节点之外,还存储“allPhoneNumbers”节点下的数字列表.这将使您的数据更新更轻,更容易处理时收集所有数字.如果你说数百个用户,“用户”数据快照将会变得太大,“allPhoneNumbers”列表的效率会更高.

上面的代码已经在您的示例数据库上进行了测试,并且工作正常但是,根据用户的电话实例字段的类型,您的手机字段可能需要转换为String或int.

Firebase Firestore从集合中获取数据

Firebase Firestore从集合中获取数据

我想从Firebase Firestore数据库获取数据。我有一个名为user的集合,每个用户都有一些相同类型的对象(My
Java自定义对象)的集合。我想在创建我的活动时用这些对象填充ArrayList。

private static ArrayList<Type> mArrayList = new ArrayList<>();;

在onCreate()中:

getListItems();Log.d(TAG, "onCreate: LIST IN ONCREATE = " + mArrayList);*// it logs empty list here

调用以获取项目列表的方法:

private void getListItems() {    mFirebaseFirestore.collection("some collection").get()            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {                @Override                public void onSuccess(QuerySnapshot documentSnapshots) {                    if (documentSnapshots.isEmpty()) {                        Log.d(TAG, "onSuccess: LIST EMPTY");                        return;                    } else {                        for (DocumentSnapshot documentSnapshot : documentSnapshots) {                            if (documentSnapshot.exists()) {                                Log.d(TAG, "onSuccess: DOCUMENT" + documentSnapshot.getId() + " ; " + documentSnapshot.getData());                                DocumentReference documentReference1 = FirebaseFirestore.getInstance().document("some path");                                documentReference1.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {                                    @Override                                    public void onSuccess(DocumentSnapshot documentSnapshot) {                                        Type type= documentSnapshot.toObject(Type.class);                                        Log.d(TAG, "onSuccess: " + type.toString());                                        mArrayList.add(type);                                        Log.d(TAG, "onSuccess: " + mArrayList);                                        /* these logs here display correct data but when                                         I log it in onCreate() method it''s empty*/                                    }                                });                            }                        }                    }                }            }).addOnFailureListener(new OnFailureListener() {        @Override        public void onFailure(@NonNull Exception e) {            Toast.makeText(getApplicationContext(), "Error getting data!!!", Toast.LENGTH_LONG).show();        }    });}

答案1

小编典典

get()操作返回a Task<>,这意味着它是一个 异步操作
。调用getListItems()仅启动操作,它不等待操作完成,因此您必须添加成功和失败侦听器。

尽管您无法对操作的异步性质做很多事情,但是可以按照以下方式简化代码:

private void getListItems() {    mFirebaseFirestore.collection("some collection").get()            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {                @Override                public void onSuccess(QuerySnapshot documentSnapshots) {                    if (documentSnapshots.isEmpty()) {                        Log.d(TAG, "onSuccess: LIST EMPTY");                        return;                    } else {                        // Convert the whole Query Snapshot to a list                        // of objects directly! No need to fetch each                        // document.                        List<Type> types = documentSnapshots.toObjects(Type.class);                        // Add all to your list                        mArrayList.addAll(types);                        Log.d(TAG, "onSuccess: " + mArrayList);                    }            })            .addOnFailureListener(new OnFailureListener() {                @Override                public void onFailure(@NonNull Exception e) {                    Toast.makeText(getApplicationContext(), "Error getting data!!!", Toast.LENGTH_LONG).show();                }            });}

我们今天的关于如何在 Firebase 中获取所有子密钥?firebase使用的分享就到这里,谢谢您的阅读,如果想了解更多关于android – 如何从firebase中的值获取密钥、android – 如何在Item Click上从FirebaseListAdapter获取obj键. FirebaseUI、android – 如何获取所有孩子的数据在firebase数据库?、Firebase Firestore从集合中获取数据的相关信息,可以在本站进行搜索。

本文标签: