gpt4 book ai didi

java - Firebase 数据库 Android - 将具有不同结构的 datasnapshot 子级映射到 java 对象

转载 作者:行者123 更新时间:2023-12-02 11:34:35 25 4
gpt4 key购买 nike

我在 Firebase 数据库中有这些数据。

enter image description here

我想要做的是将这个子项(list1)映射到一个java对象上。当我只想要 list1 的子项时,我可以使用如下所示将它们映射到自定义对象(例如 ProductFirebase)上:

        FirebaseDatabase database = FirebaseDatabase.getInstance();
//database.setPersistenceEnabled(true);
final DatabaseReference myRef = database.getReference("list1");


ChildEventListener childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {



ProductFirebase product = dataSnapshot.getValue(ProductFirebase.class);



}

我真的不知道如何映射所有列表(list1、list2..等),因为最后两个 child 在结构上与 sibling 不同。

我在想类似的事情

Map<String<String, ProductFirebase>> list = (Map<String<String, ProductFirebase>>) dataSnapshot.getValue();

但是,当然,最后两个元素不是 ProductFirebase 并且它不起作用。

有办法创建一个与 dataSnapshot 的结果匹配的对象吗?

还有一件事..只有值为 true 的节点数量不固定。可能超过 2 个,这取决于共享列表的人数。

提前致谢

更新:

enter image description here

这是一般情况。我想查询所有包含键“8ada6af0-de37-495d-8349-0cd4c215fc87”的列表。所以我期待收到 list1 和 list3。确实如此!但现在我遇到了我在主题第一部分中描述的原始问题。

最佳答案

您应该重构一下您的数据库。您应该将那些值为 true 的节点放入单独的节点中(我在这里将它们称为 Ids)。另外,对于 list1、list2、... 节点,您应该创建一个父节点。例如:

"lists": {
"list1": {
"category": "food",
...
},
"list2": {
...
},
...
},
"ids": {
"8ada6af0-...": true,
...
}

现在,如果您创建另一个自定义对象(让它成为数据),其中包含:

// the inner map is one list object
Map<String, Map<String, ProductFirebase>> mProducts;
Map<String, Ids> mIds;

Ids 对象应包含:

Map<String, Boolean> mIds;

现在,通过这个结构,您可以获取数据,就像您已经做的那样:

Data data = dataSnapshot.getValue(Data.class);

希望这能解决您的问题。

更新:

在这种情况下,您可以将键存储在单独的节点中,并在其中存储具有此键的列表的 id。在您的情况下,您将拥有:

"keys": {
"8ada6af0-de37-495d-8349-0cd4c215fc87": {
"list1": true,
"list3": true
},
...
}

首先,您进行查询以获取“keys/8ada6af0-de37-495d-8349-0cd4c215fc87”节点的内容,然后再进行另一个查询以获取这些列表。

Here您可以找到有关如何进行此类查询的很好的教程。

关于java - Firebase 数据库 Android - 将具有不同结构的 datasnapshot 子级映射到 java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49046594/

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