【问题标题】:Unable to fetch nested data from realtime database of firebase in firebase recycler view无法从 firebase 回收器视图中的 firebase 实时数据库中获取嵌套数据
【发布时间】: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;
    }
}

【问题讨论】:

    标签: android firebase firebase-realtime-database firebaseui


    【解决方案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;,则不需要自定义解析器。如果您想要自定义解析器,请查看其中的一些以获得灵感:stackoverflow.com/…?
    • 好的,非常感谢,一定会看看的。
    猜你喜欢
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    相关资源
    最近更新 更多