为了账号安全,请及时绑定邮箱和手机立即绑定

Android 如何让从 firebase 数据库加载数据与 orderByChild()

Android 如何让从 firebase 数据库加载数据与 orderByChild()

呼唤远方 2022-10-07 16:45:48
我想对 Firebase RealTimeDatabase 中的数据进行排序。我想要做的是,当我首先加载数据时,它将从我放入的子值开始,如“7”,然后它将根据子“NUMBER”值以升序和limitToFirst( 2)数据。但是日志总是显示dataSnapshot不存在。这是我的代码加载数据的代码private void testData(){        final ArrayList<FirebaseDatabaseGetSet> testArrayList;        testArrayList = new ArrayList<>();        databaseReference = firebaseDatabase.getReference();        databaseReference.child("VTEST").orderByChild("NUMBER").startAt("7").limitToFirst(2).addListenerForSingleValueEvent(new ValueEventListener() {            @Override            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {                if (dataSnapshot.exists()){                    Log.d("MOSTPOPCURRENTLASTNODE", "LOAINGMOREDATA");                    for (DataSnapshot DS:dataSnapshot.getChildren()){                        FirebaseDatabaseGetSet getSet = DS.getValue(FirebaseDatabaseGetSet.class);                        testArrayList.add(getSet);                    }                    Log.d("MOSTPOPCURRENTLASTNODE", String.valueOf(testArrayList.get(0).getNUMBER()));                    Log.d("MOSTPOPCURRENTLASTNODE", String.valueOf(testArrayList.get(1).getNUMBER()));                }else {                    Log.d("MOSTPOPCURRENTLASTNODE", "NOLOAINGMOREDATA");                }            }            @Override            public void onCancelled(@NonNull DatabaseError databaseError) {            }        });    }这是我的 Firebase 数据结构数据结构"VTEST" : {"A" : {  "NUMBER" : 5},"B" : {  "NUMBER" : 3},"C" : {  "NUMBER" : 7},"D" : {  "NUMBER" : 10},"E" : {  "NUMBER" : 12},"F" : {  "NUMBER" : 8}}我对日志的期望是“7”和“8”,但它总是显示 dataSnapshot 不存在。有人可以告诉我我在这里做错了什么吗,我已经尝试寻找其他一些类似的问题,但找不到任何解决方案。
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

您正在过滤:

databaseReference.child("VTEST").orderByChild("NUMBER").startAt("7")

你正在存储:

"NUMBER" : 7

如果你仔细看,你会发现一个是字符串,另一个是整数。在 Firebase 实时数据库中,不同类型的值永远不会相等。

要解决此问题,请按数值过滤:

databaseReference.child("VTEST").orderByChild("NUMBER").startAt(7)


查看完整回答
反对 回复 2022-10-07
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

试试这个,我通过缩短孩子以这种方式获取数据:-


mChatReference = FirebaseDatabase.getInstance().getReference(VTEST)

                .child("user id");

        Query query = mChatReference.orderByChild("NUMBER");

        query.addValueEventListener(new ValueEventListener() {

            @Override

            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {

                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {

                yourList.add(snapshot.child("NUMBER").getValue());

            }

            }


            @Override

            public void onCancelled(@NonNull DatabaseError databaseError) {


            }

        });


查看完整回答
反对 回复 2022-10-07
  • 2 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信