Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.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
Java 如何指向随机键(firebase用户ID)_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何指向随机键(firebase用户ID)

Java 如何指向随机键(firebase用户ID),java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我想根据创建日期和时间从Firebase检索数据 我还没有找到任何其他方法来代替创建每个用户的子级来使用orderByChild(“Create”)保存创建日期和时间排序,但是每个用户都是使用随机id保存的。我如何指向以下子级进行排序: DatabaseReference userref = FirebaseDatabase.getInstance().getReference().child("Connection").child("Admin");

我想根据创建日期和时间从
Firebase
检索数据 我还没有找到任何其他方法来代替创建每个用户的子级来使用
orderByChild(“Create”)
保存创建日期和时间排序,但是每个用户都是使用随机id保存的。我如何指向以下子级进行排序:

DatabaseReference userref = FirebaseDatabase.getInstance().getReference().child("Connection").child("Admin");
        userref.orderByChild("Create");

        userref.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                if (dataSnapshot.exists()) {
                    for (DataSnapshot userSnapshot : dataSnapshot.getChildren()) {

                        Users users = userSnapshot.getValue(Users.class);
                        adminsList.add(users);

                    }
                    mAdapter = new Adapter_All_Admins(adminsList);
                    mRecyclerView.addItemDecoration(new DividerItemDecoration(getContext(), LinearLayoutManager.VERTICAL));
                    mRecyclerView.setAdapter(mAdapter);


                }

            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });



您的代码中不止一个问题

我还没有找到任何其他方法来代替创建每个用户的子级来使用orderByChild(“创建”)保存创建日期和时间排序

这是为每个用户创建单独节点的推荐方法。第一个问题是Firebase实时数据库查询是不可变的,这意味着您无法更改现有查询的属性。如果通过调用
.orderByChild(“Create”)
方法更改该值,它将成为一个新查询。这与类的行为完全相同。因此,要解决此问题,请将所有方法调用链接起来,并将它们存储在单个
查询
对象中:

Query userref = FirebaseDatabase.getInstance().getReference()
    .child("Connection")
    .child("Admin")
    .orderByChild("Create");
或者您可以创建一个新的
查询
对象,如下所示:

Query createQuery = userref.orderByChild("Create");
createQuery.addValueEventListener(/* ... */);
第二个问题,要获得相关结果,请注意时间戳应该而不是存储为字符串:

创建:“2019/09/11 02.32:54”

因为这种情况下的顺序是。因此,您肯定应该将它们存储为
ServerValue.TIMESTAMP
,正如我在以下帖子中的回答所述:

第三个问题是数据库中的属性以大写字母开头。如果
Users
类中的字段是小写的,或者即使以大写字母开头,也可能会出现以下错误:

W/ClassMapper:在类用户上找不到
Create
的setter/字段

要解决此问题,您应该使用以下帖子中的答案:

或从以下职位:

编辑:

查询时,无需将uid
0yozyNJzCvTWtRU8ufe5Zx8TPvu1添加为子项。您应该只获取对
Admin
的引用,然后遍历子对象(实际上是用户对象)。调用
.orderByChild(“Create”)
时,您正在将
数据库引用
对象转换为
查询
对象,并根据
创建
属性对所有用户进行排序

仅当您希望获取特定用户对象时,才应添加对
子对象(“0yozyNJzCvTWtRU8ufe5Zx8TPvu1”)的显式调用,否则不需要这样做

或者你是。orderByChild()也可以用于子项


是的,它会起作用的。试试看;)

通过阅读你的问题,我真的很难理解你的确切问题。我不知道你的最终目标是什么?您的预期和当前产出是什么?你为什么担心随机键?你所说的“我怎么能指按孩子排序”是什么意思?最后,您已经知道,通过使用orderByChild(“创建”)可以对其进行排序,那么问题是什么呢?实际上orderByChild(“创建”)会将userref作为userref reffers发送给“Admin”,但在Admin中没有类似于“Create”的子级。它是一个包含用户数据的随机键的子级,我希望以引用到随机键的方式发送orderByChild(“创建”)可以work@Roaim现在检查但在这里。child(“Admin”).orderByChild(“Create”);没有作为“Create”的子项,它是“Admin”的子项,在“Admin”和“Create”之间有一个随机键,我可以说是“.child(“Admin”).child(“0yozyNJzCvTWtRU8ufe5Zx8TPvu1”).orderByChild(“Create”);'但我并不是检索单个键的数据,所以我可以使用这个来代替这个随机键,这样我就可以根据每个随机键、、、或您的.orderByChild()中的“Create”对所有数据进行排序也可以为sub-child工作吗?它工作很好,你能帮我一个忙,对它进行升序或降序排序吗?如果一个用户是在2019年创建的,第二个是在2020年,那么2020年的用户应该在底部,2019年的用户应该在顶部。这个问题与最初的问题无关。因此,为了遵守这个社区的规则,请发布另一个新问题上,所以我和其他Firebase开发人员可以帮助您。我认为没有人能够更好地处理firbase问题,那么请看这里[这是我的问题]()