我是android开发的新手。首先看一下图片。
我现在遇到的问题,我不能在“每日膳食”部分检查孩子是否存在。我可以在“BazarList”上轻松检查孩子,因为没有随机生成的密钥。
这是孩子存在检查“BazarList”的代码,它运行正常。
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) {
}
});
}
如果你认为为什么我没有像“BazarList”那样做“Daily Meal”部分,那么这是一件事吗?有答案。在这种情况下,firebase会自动对数据进行排序,这意味着如果我插入1然后是4然后11,那么在firebase中它会自动加入1,11,4。那么问题。当我试图检索它时,它不会顺序返回。这就是为什么我需要将这些值放在随机生成的密钥中。
答案 0 :(得分:2)
使用等于日期的查询,该查询将显示符合条件的所有子项。
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
});
查看the documentation以查看有关查询的更多信息。
答案 1 :(得分:0)
改变这个:
if (dataSnapshot.child(user.getDate()).exists()) {
进入这个:
if (dataSnapshot.child("date").exists()) {
数据库中的 Daily Meal
下的孩子被称为date
而不是它的价值。
试试这个:
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) {
}
});