随机键下android中是否存在Firebase子项
我是android开发的新手。首先看这幅画 我现在的问题是,我不能在“每日膳食”部分检查孩子是否存在。在这里,我可以很容易地检查“BazarList”上的child,因为并没有随机生成的密钥 下面是检查“BazarList”的child-exist代码,它可以正常工作随机键下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
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的方法会起作用的