我正在努力将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'在食物名称。
那么如何将这些数据作为List检索?我确实有一个模型,但如果有人能指出我正确的方向,我将不胜感激。
编辑:
运行此代码时:
Query searchQuery = fitnessTrackerRef.orderByChild("foodName");
它将检索所有项目(应该如此),但是当我添加要搜索的查询时,它将返回一个空值。这是下面的代码和两张结果图片。
Query searchQuery = fitnessTrackerRef.orderByChild("foodName").startAt(query).endAt(query + "\\uf8ff");
如图所示,添加查询时不会返回任何数据。我的searchQuery语法不正确吗?
答案 0 :(得分:0)
这是如何创建食物名称列表的:
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);