无法从 firebase 回收器视图中的 firebase 实时数据库中获取嵌套数据
Posted
技术标签:
【中文标题】无法从 firebase 回收器视图中的 firebase 实时数据库中获取嵌套数据【英文标题】:Unable to fetch nested data from realtime database of firebase in firebase recycler view 【发布时间】:2021-08-01 14:08:37 【问题描述】:我正在尝试从 firebase 数据库中获取数据并在回收器视图中显示它,当没有嵌套数据但不适用于嵌套数据时,它工作得非常好,请帮助我,我在这里附上所有屏幕截图。
JSON 上传到 firebase:
"orders":
"order1":
"Customer": "Ankit",
"Description": "Make it spicy",
"Food":
"Paneer":
"Full_Plate": 1,
"Half_Plate": 1
,
"Roti":
"Full_Plate": 1,
"Half_Plate": 2
,
"Header": "table1"
,
"order2":
"Customer": "Raghav",
"Description": "Creamy",
"Food":
"Chicken":
"Full_Plate": 1,
"Half_Plate": 1
,
"Header": "Table2"
我的onCreateView()
代码
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
View view= inflater.inflate(R.layout.fragment_recfragment, container, false);
recview=(RecyclerView)view.findViewById(R.id.recview);
recview.setLayoutManager(new LinearLayoutManager(getContext()));
FirebaseRecyclerOptions<Model> options=
new FirebaseRecyclerOptions.Builder<Model>()
.setQuery(FirebaseDatabase.getInstance().getReference().child("orders"),Model.class)
.build();
myAdapter=new MyAdapter(options);
recview.setAdapter(myAdapter);
return view;
模型类代码:
public class Model
String Customer,Description,Header;
HashMap<String,ArrayList<Integer>> Food;
public Model()
public Model(String customer, String description, String header, HashMap<String, ArrayList<Integer>> food)
Customer = customer;
Description = description;
Header = header;
Food = food;
public String getCustomer()
return Customer;
public void setCustomer(String customer)
Customer = customer;
public String getDescription()
return Description;
public void setDescription(String description)
Description = description;
public String getHeader()
return Header;
public void setHeader(String header)
Header = header;
public HashMap<String, ArrayList<Integer>> getFood()
return Food;
public void setFood(HashMap<String, ArrayList<Integer>> food)
Food = food;
【问题讨论】:
【参考方案1】:Firebase 使用 JavaBean 约定来确定 JSON 中的属性名称。这意味着像public String getCustomer()
这样的方法将转换为数据库中的属性customer
。注意到那里的外壳不同了吗?这很可能是您的问题的原因。
如果要维护数据库中的大小写,可以在 Java 类上添加注释以显式指定属性名称:
@PropertyName("Customer")
public String getCustomer()
return Customer;
@PropertyName("Customer")
public void setCustomer(String customer)
Customer = customer;
您需要为数据库中的名称/大小写与 Java 类中的名称/大小写不完全匹配的每个 getter/setter 执行此操作。
【讨论】:
谢谢,先生回复,但这不是我的问题。在 Jason 数据中,有一个名为“food”的字段,在“food”中我们有“Paneer”和“Roti”。我的数据是这样的,下次它可以是“鸡肉”或“食物”下的任何东西。所以我不知道名称和数据是嵌套的。我想获取这种类型的数据,请帮忙。 对于这个问题,你可能想尝试使用。HashMap<String, Object>
,因为我认为 Firebase 可能无法映射到更具体的 HashMap<String, ArrayList<Integer>>
。
是的,先生,这正是我的问题。在它编写的文档中,您可以使用 SnapshotParser 但不知道如何使用它。谢谢您的时间先生。
如果您使用HashMap<String, Object>
,则不需要自定义解析器。如果您想要自定义解析器,请查看其中的一些以获得灵感:***.com/…?
好的,非常感谢,一定会看看的。以上是关于无法从 firebase 回收器视图中的 firebase 实时数据库中获取嵌套数据的主要内容,如果未能解决你的问题,请参考以下文章