snapshot.getChildren() 打印值,而 getValue() 返回 null
Posted
技术标签:
【中文标题】snapshot.getChildren() 打印值,而 getValue() 返回 null【英文标题】:snapshot.getChildren() prints the values while getValue() returns null 【发布时间】:2021-12-10 07:57:51 【问题描述】:我在快照能够打印值时遇到问题,但是通过使用获取值来指定返回 null。
我正在尝试检索上传到 Firebase 的列表,并将其与用户将通过的列表进行比较。
rootReference.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
for (DataSnapshot item_child : snapshot.getChildren())
String recId = item_child.getKey();
DatabaseReference rootReference = FirebaseDatabase.getInstance("https://what-s-cookin-a3bec-default-rtdb.asia-southeast1.firebasedatabase.app/")
.getReference().child("Recipes").child(recId);
Log.d(TAG, "RECID: " + recId);
rootReference.addListenerForSingleValueEvent(new ValueEventListener()
@Override
public void onDataChange(@NonNull DataSnapshot snapshot)
for (DataSnapshot ds : snapshot.getChildren())
Log.d(TAG, "SNAPSHOT: " + ds);
Log.d(TAG, "SPECIFIC: " + ds.child("ingredients"));
if(ds.child("ingredients").getValue() != null)
Log.d(TAG, "INGREDIENTS NOT NULL");
ArrayList<String> ing = new ArrayList<String>();
for (DataSnapshot ings : snapshot.child("ingredients").getChildren())
ing.add(ings.getValue(String.class));
Log.d(TAG, "DS: " + ds);
Log.d(TAG, "INGS: " + ings);
这是 logcat 的结果:
SNAPSHOT: DataSnapshot key = ingredients, value = 0=Fish, 1=bitter, 2=cilantro
SPECIFIC: DataSnapshot key = ingredients, value = null
Logcat screenshot
这是我们的火力基地: Firebase Screenshot
食谱 1634971267099 收藏数:8 编号:“1634971267099” imageUrl:“https://firebasestorage.googleapis.com/v0/b/wha...” 配料 0:“鱼” 1:“苦” 2:“香菜” 主菜:“猪肉” 测量:“测试” 名称:“波切罗” 产品:“测试” 发球:“15” 时间:“30” uid:“tMdUFcAelyeVo5DYW3P7HolRW4S2”
【问题讨论】:
您的第二个for
循环超过 snapshot.child("ingredients").getChildren()
,但应该是 ds.child("ingredients").getChildren()
。我强烈建议使用有意义的变量名来防止此类错误。
谢谢,但这不是问题。我将变量更改为您建议的变量,但仍然出现同样的问题。当我使用 getChildren() 时,它会打印出数据库中的所有内容,但是当我专门将其称为 child.("ingredients").getValue() 时,它会返回 null
这绝对是您代码中的问题之一。您首先检查if(ds.child("ingredients").getValue()
,然后使用for (DataSnapshot ings : snapshot.child("ingredients").getChildren())
循环,因此您在其中一个中使用了错误快照的ingredients
子项。如果您解决了这个问题但仍然遇到同样的问题,请编辑您的问题以显示更新后的代码。
【参考方案1】:
检查您的代码是否与 Firebase 数据匹配。 如果您发布 Firebase 数据的屏幕截图以了解数据库层次结构,会更清楚。
很难从你的代码中理解数据库结构。
【讨论】:
我编辑了问题并添加了 firebase 层次结构。对此感到抱歉以上是关于snapshot.getChildren() 打印值,而 getValue() 返回 null的主要内容,如果未能解决你的问题,请参考以下文章