我正在努力为我的应用程序实施 Firebase 实时数据库,问题是 DataSnapShot 检索空键和值。
我曾尝试查看文档,但我不知道出了什么问题。
数据库结构:
我的代码:
private DatabaseReference mUserDatabase;
public NetworkRepository(){
mUserDatabase = FirebaseDatabase.getInstance().getReference();
}
public void getFoodFromFirebase(String query){
Query searchQuery = mUserDatabase.orderByChild("Food Name").startAt(query).endAt(query + "\\uf8ff");
searchQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = dataSnapshot.getValue(String.class);
Log.d("Value is: ", value);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
语境:
我正在使用一个搜索查询,它将返回数据库中的所有项目。因此,理想情况下,如果用户键入“App”,它将返回“食品名称”中包含“App”的所有内容。
那么如何将这些数据作为列表检索呢?我确实有一个模型,但如果有人能指出我正确的方向,我将不胜感激。
编辑:
运行此代码时:
Query searchQuery = fitnessTrackerRef.orderByChild("foodName");
它将检索所有项目(应该如此),但是当我添加要搜索的查询时,它将返回一个空值。这是下面的代码和结果的两张图片。
Query searchQuery = fitnessTrackerRef.orderByChild("foodName").startAt(query).endAt(query + "\\uf8ff");
如图所示,添加查询时不会返回任何数据。我的 searchQuery 语法不正确吗?
您可以通过以下方式创建食物名称列表:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference itemsRef = rootRef.child("items");
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<String> list = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
String foodName = ds.child("Food Name").getValue(String.class);
list.add(foodName);
}
Log.d("TAG", list);
}
@Override
public void onCancelled(DatabaseError databaseError) {}
};
itemsRef.addListenerForSingleValueEvent(valueEventListener);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句