随机键下android中是否存在Firebase子项

随机键下android中是否存在Firebase子项,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我是android开发的新手。首先看这幅画 我现在的问题是,我不能在“每日膳食”部分检查孩子是否存在。在这里,我可以很容易地检查“BazarList”上的child,因为并没有随机生成的密钥 下面是检查“BazarList”的child-exist代码,它可以正常工作 DatabaseReference dr= FirebaseDatabase.getInstance().getReference("BazarList"); dr.addListenerForSingleValue

我是android开发的新手。首先看这幅画

我现在的问题是,我不能在“每日膳食”部分检查孩子是否存在。在这里,我可以很容易地检查“BazarList”上的child,因为并没有随机生成的密钥

下面是检查“BazarList”的child-exist代码,它可以正常工作

 DatabaseReference dr= FirebaseDatabase.getInstance().getReference("BazarList");

    dr.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {


     if (dataSnapshot.child(bzs.getDate()).exists()) {
                    ExistD();

                }
                else {



                        Bazar bz = new Bazar(dt, ct, nm, it);
                        dr.child(dt).setValue(bz);
                        dataInsert();

                    }
}
现在我的问题是如何检查“每日膳食”的孩子(日期)是否存在? 我试过这个

  DatabaseReference databaseBazars= FirebaseDatabase.getInstance().getReference("Daily Meal");

final MealE user = new MealE(
            md.getText().toString().trim(),
            rb.getText().toString().trim(),
            rb2.getText().toString().trim(),
            rb3.getText().toString().trim(),
            rb4.getText().toString().trim(),
            rb5.getText().toString().trim(),
            rb6.getText().toString().trim(),
            rb7.getText().toString().trim());


    databaseBazars.addListenerForSingleValueEvent(new ValueEventListener() {

                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {

                    if (dataSnapshot.child(user.getDate()).exists()) {


                       ExistD();

                    }


                    else {
                        if (!TextUtils.isEmpty(dt))
                        {
                            String id = databaseBazars.push().getKey();
                            MealE bz = new MealE(dt, s1, s2, s3, s4, s5, s6, s7);
                            databaseBazars.child(id).setValue(bz);
                            openDialog();
                        }
                        else {

                            MissingDAte();
                        }

                    }
                }


                @Override
                public void onCancelled(DatabaseError databaseError) {

                }
            });





        }
如果你们想知道为什么我不做“每日膳食”部分,比如“巴扎尔主义者”,这里有一件事?答案是有的。在这种情况下,firebase会自动对数据进行排序,这意味着如果我插入1,然后插入4,然后插入11,那么在firebase中它会自动排序,就像1,11,4一样。然后是问题。当我试图找回它时,它不会按顺序返回。这就是为什么我需要将这些值放入随机生成的键中

改变这一点:

 if (dataSnapshot.child(user.getDate()).exists()) {
为此:

 if (dataSnapshot.child("date").exists()) {
在数据库中,
每日膳食
下的孩子被称为
日期
,而不是它的值

试试这个:

   Query dateQuery = FirebaseDatabase.getInstance().getReference("Daily Meal");

   dateQuery.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
                for(DataSnapshot data: dataSnapshot.getChildren()){
                     String keys=data.getKey();
                   if(dataSnapshot.child(keys).child("date").exists()){
                   ExistD();
                    }

                }
            }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

使用与日期相等的查询,该查询将显示符合条件的所有子项

Query dateQuery = FirebaseDatabase.getInstance().getReference("Daily Meal").orderByChild("date").equalTo(user.getDate());

dateQuery.addListenerForSingleValueEvent(new ValueEventListener() {
                @Override
            public void onDataChange(DataSnapshot dataSnapshot) {

                if (dataSnapshot.exists()) {
                   ExistD();
                } else {
                    if (!TextUtils.isEmpty(dt))
                    {
                        String id = databaseBazars.push().getKey();
                        MealE bz = new MealE(dt, s1, s2, s3, s4, s5, s6, s7);
                        databaseBazars.child(id).setValue(bz);
                        openDialog();
                    } else {
                        MissingDAte();
                    }
                }
            }
        // put rest of your code here
});

查看有关查询的更多信息。

它位于随机生成的键下的(日期)。我怎样才能查到电话号码。你给它的解决方案对我不起作用:'(哦,钥匙在那里,所以你需要得到钥匙,然后做
dataSnapshot.child(key.child(“date”)。存在问题。钥匙显示错误。实际上我可以从哪里得到钥匙。它是随机生成的兄弟。这就是你得到钥匙的方式,但Jen的方法会起作用的