gpt4 book ai didi

android - 为什么不调用 Firebase onChildAdded?

转载 作者:行者123 更新时间:2023-11-30 00:12:53 30 4
gpt4 key购买 nike

我想在我的 firebase 数据库中获取“服装”引用下的所有 firebase 节点。为此,我将 ChildEventListener 附加到引用,并在 onChildAdded 回调中将 Clothing 对象添加到服装对象列表中,假设onChildAdded 回调被称为“服装”引用下有节点的次数。

mClothingRef = FirebaseDatabase.getInstance()
.getReference()
.child("clothing");
final List<Clothing> clothingItems = new ArrayList<>();

mClothingRef.addChildEventListener(new ChildEventListener() {
public void onChildAdded(DataSnapshot snapshot, String s) {
Clothing clothing = snapshot.getValue(Clothing.class);
clothingItems.add(clothing);
Log.d(TAG, "onChildAdded called");
}
public void onCancelled(DatabaseError databaseError) {
Log.e(TAG, databaseError.getMessage() + " " +
databaseError.getCode() + " " + databaseError.getDetails() + " " + databaseError.toString());
mEventBus.post(new ListClothingFailEvent());
}
...
}

这是数据库结构:

-->root
---->clothing
------>clothing_id
-------->title
-------->category
-------->img_download_url
------>clothing_id_1
-------->title
-------->...

我需要获取服装节点下的所有节点。

目前我的数据库安全规则是:

{
"rules": {
".read": "auth == null",
".write": "auth != null"
}
}

当调用包含此代码的方法时,onChildAdded 回调不会出现,而 onCancelled 回调会出现权限被拒绝的数据库错误。为什么会这样?

最佳答案

要显示该数据,请使用以下代码:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference clothingRef = rootRef.child("clothing");
ValueEventListener eventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
List<Clothing> clothingItems = new ArrayList<>();
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Clothing clothing = snapshot.getValue(Clothing.class);
clothingItems.add(clothing);
}
Log.d("TAG", clothingItems);
}

@Override
public void onCancelled(DatabaseError databaseError) {}
};
clothingRef.addListenerForSingleValueEvent(eventListener);

关于android - 为什么不调用 Firebase onChildAdded?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47869990/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com