无法从 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&lt;String, Object&gt;,因为我认为 Firebase 可能无法映射到更具体的 HashMap&lt;String, ArrayList&lt;Integer&gt;&gt; 是的,先生,这正是我的问题。在它编写的文档中,您可以使用 SnapshotParser 但不知道如何使用它。谢谢您的时间先生。 如果您使用HashMap&lt;String, Object&gt;,则不需要自定义解析器。如果您想要自定义解析器,请查看其中的一些以获得灵感:***.com/…? 好的,非常感谢,一定会看看的。

以上是关于无法从 firebase 回收器视图中的 firebase 实时数据库中获取嵌套数据的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 中的嵌套查询填充回收站视图

使用firebase在无尽的回收器视图中进行分页

使用 firebase 未显示回收站视图 - kotlin

node_modules/@angular/fire/firebase.app.module.d.ts 中的错误?

如何根据位置从“回收”视图中删除Firebase数据库密钥

使用 OnClick 删除回收站视图中的项目。 Firebase 安卓