Java 尝试组合orderByChild()和startAt()时获取null值
尝试使用orderByChild()和startAt()对数据进行排序和筛选时,将值设置为null 我在下面附上数据结构和结果的图片,这是我以数据快照的形式得到的 代码如下Java 尝试组合orderByChild()和startAt()时获取null值,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,尝试使用orderByChild()和startAt()对数据进行排序和筛选时,将值设置为null 我在下面附上数据结构和结果的图片,这是我以数据快照的形式得到的 代码如下 Query queryMeal = FirebaseDatabase.getInstance().getReference("meals"); queryMeal.orderByChild("meal_name").startAt("ggh").addListenerForSingleValueE
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) {
}
});
要解决此问题,请更改以下代码行:
Query queryMeal = FirebaseDatabase.getInstance().getReference("meals");
ueryMeal.orderByChild("meal_name").startAt("ggh").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);
在onDataChange方法中,执行以下操作
if(dataSnapshot != null){
Log.e("Query DataSnapShot",""+dataSnapshot.getValue().toString());
}
结果很明显,brother,当您试图查询'Fine_name'时,它的级别降低了3级,但要使用orderByChild,子级必须降低2级。此时,您的代码正在从您希望返回的节点返回上一级的结果。这些看起来不错,但我想在整个“Fine”节点中搜索。在这种情况下,您应该查询数据库两次,就像我更新的答案一样,对吗?谢谢老板,这有助于进行一些修改。@HimanshuBhoraniya不客气!你认为我的回答对你有帮助吗?是的,伙计,有帮助。
if(dataSnapshot != null){
Log.e("Query DataSnapShot",""+dataSnapshot.getValue().toString());
}