Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Firebase数据库检索数据,DataSnapShot返回空值和键_Java_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Java 如何从Firebase数据库检索数据,DataSnapShot返回空值和键

Java 如何从Firebase数据库检索数据,DataSnapShot返回空值和键,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,我正在努力将Firebase实时数据库实现到我的应用程序中,问题是DataSnapShot检索空键和值 我试着看了一下文档,但我不知道哪里出了问题 数据库结构: 我的代码: 背景: 我使用的搜索查询将返回数据库中的所有项目。因此,理想情况下,如果用户键入“App”,它将返回食物名称中包含“App”的所有内容 那么,我如何以列表的形式检索这些数据呢?我确实有一个模型,但如果有人能为我指出正确的方向,我将不胜感激 编辑: 运行此代码时: Query searchQuery = fitnessTrac

我正在努力将Firebase实时数据库实现到我的应用程序中,问题是DataSnapShot检索空键和值

我试着看了一下文档,但我不知道哪里出了问题

数据库结构:

我的代码:

背景:

我使用的搜索查询将返回数据库中的所有项目。因此,理想情况下,如果用户键入“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);

看起来你正在运行到@JohnO'Reilly尝试了解决方案,但我仍然得到一个空键和值。我想这可能是因为OrderByChild,因为它不是食品名称,而是我认为实际上是0或1。感谢您的回复,我刚刚使用上面的代码进行了测试。现在我实际得到了密钥,但值仍然为空。知道为什么吗?对,因此如果我将代码编辑为:Query searchQuery=fitnessTrackerRef.orderByChildfoodName,它将提供列表中的所有实体,但当我添加时,它将提供列表中的所有实体。startAtquery.endAtquery+\\uf8ff;对于它,它将返回null。你知道为什么吗?你说你得到的是键,值仍然是null,但这是不可能的,因为上面的代码只得到了值。当使用.startAtquery.endAtquery+\\uf8ff时,它返回null,很可能是因为您的查询对象不正确。你认为我的回答对你有帮助吗?很抱歉,回复太晚了。这是一个附带项目,还没有解决问题。现在检查一下,看看能做些什么。如果有错误,请粘贴到这里,看看发生了什么。
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);