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

尝试组合 orderByChild() 和 startAt() 时使用 null 获取值

尝试组合 orderByChild() 和 startAt() 时使用 null 获取值

倚天杖 2021-12-22 19:23:46
在尝试使用 orderByChild() 和 startAt() 对数据进行排序和过滤的代码时,将 Value 设为 null我在下面附上了数据结构和结果的图像,我以数据快照的形式获得了这些图像。代码如下Query queryMeal = FirebaseDatabase.getInstance().getReference("meals");            queryMeal.orderByChild("meal_name").startAt("ggh").addListenerForSingleValueEvent(new ValueEventListener() {                @Override                public void onDataChange(@NonNull DataSnapshot dataSnapshot) {                    Log.e("Query DataSnapShot",""+dataSnapshot.toString());                }                @Override                public void onCancelled(@NonNull DatabaseError databaseError) {                }            });
查看完整描述

2 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

要解决此问题,请更改以下代码行:


Query queryMeal = FirebaseDatabase.getInstance().getReference("meals");

ueryMeal.orderByChild("meal_name").startAt("ggh").addListenerForSingleValueEvent();


String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

Query queryMeal = FirebaseDatabase.getInstance().getReference().child("meals").child(uid);

ueryMeal.orderByChild("meal_name").startAt("ggh").endAt("ggh" + "\uf8ff").addListenerForSingleValueEvent();

编辑:


DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

DatabaseReference mealsRef = rootRef.child("meals");

ValueEventListener valueEventListener = new ValueEventListener() {

    @Override

    public void onDataChange(DataSnapshot dataSnapshot) {

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

            String uid = uidSnapshot.getKey();


            DatabaseReference uidRef = rootRef.child("meals").child(uid).startAt("ggh").endAt("ggh" + "\uf8ff");

            ValueEventListener eventListener = new ValueEventListener() {

                @Override

                public void onDataChange(DataSnapshot dataSnapshot) {

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

                        String mealName = ds.child("meal_name").getValue(String.class);

                        Log.d(TAG, mealName);

                    }

                }


                @Override

                public void onCancelled(@NonNull DatabaseError databaseError) {

                    Log.d(TAG, databaseError.getMessage());

                }

            };

            uidRef.addListenerForSingleValueEvent(eventListener);

        }

    }


    @Override

    public void onCancelled(@NonNull DatabaseError databaseError) {

        Log.d(TAG, databaseError.getMessage());

    }

};

mealsRef.addListenerForSingleValueEvent(valueEventListener);


查看完整回答
反对 回复 2021-12-22
?
杨魅力

TA贡献1811条经验 获得超6个赞

在你的 onDataChange 方法中做这样的事情


if(dataSnapshot != null){

   Log.e("Query DataSnapShot",""+dataSnapshot.getValue().toString());

}


查看完整回答
反对 回复 2021-12-22
  • 2 回答
  • 0 关注
  • 166 浏览

添加回答

举报

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