如何使用 Java 将 Arraylist 数据写入 Firebase 数据库?

Posted

技术标签:

【中文标题】如何使用 Java 将 Arraylist 数据写入 Firebase 数据库?【英文标题】:How can I write Arraylist data to Firebase Database in Java? 【发布时间】:2022-01-01 17:24:23 【问题描述】:

我有一个以 firebase 作为后端的 android 应用程序。我有一个活动,其中使用填充他们想要保存到数据库的回收器视图的列表。

下面是我的数据库的 Firebase 实时数据库结构的屏幕截图:

Values 节点中子节点的值是我用来为添加的新数据创建 id 的值。

我有一个由用户填充的销售对象数组列表,它将保存在新的 Sales 节点中,并希望使用 Values/Sales 中的值来填充数组列表中每个项目的 ID。

以下是我保存该数据的代码。但是在数据库中,只保存了arraylist中的最后一项。

ArrayList<Inventory> salesArrayList = new ArrayList<>();

------------------- Code for populating data into the arraylist ----------------------

for (int i = 0; i < salesArrayList.size(); i++)
    int finalI = i;
    databaseReference.child("Values").child("Sales").addListenerForSingleValueEvent(new ValueEventListener() 
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) 
            String newCount = String.valueOf(Integer.parseInt(String.valueOf(snapshot.getValue()))+1); // Gets the original value saved and adds 1 to it to be used as the id in the 'Sales' node
            DatabaseReference countReference = databaseReference.child("Sales").child(newCount);
            countReference.child("date").setValue(currentDate);
            countReference.child("name").setValue(salesArrayList.get(finalI).getName());
            countReference.child("quantity").setValue(salesArrayList.get(finalI).getQuantity());
            countReference.child("unit_price").setValue(salesArrayList.get(finalI).getValue()/salesArrayList.get(finalI).getQuantity());
            countReference.child("value").setValue(salesArrayList.get(finalI).getValue());

            databaseReference.child("Values").child("Sales").setValue(Integer.parseInt(newCount)); // Updates the number of sales
        

        @Override
        public void onCancelled(@NonNull DatabaseError error) 

        
    );

如果数组列表中有 7 个项目,我想要一种方法将它们全部保存在类似于 Purchases 节点的 Sales 中,而不仅仅是数组列表中的最后一项。

【问题讨论】:

【参考方案1】:

这不起作用(我很惊讶它甚至可以编译):

databaseReference.child("Values").child("Sales")(Integer.parseInt(newCount)); // Updates the number of sales

写回增加的销售数量:

snapshot.getReference().setValue(snapshot.getValue(Long.class)+1);

请注意,通常在 Firebase 中使用此类顺序数字键是一种反模式。我强烈建议使用 Firebase 的原生 push() 键,它们也总是在递增,但除此之外提供更强大的保证。要了解更多信息,请查看:Best Practices: Arrays in Firebase。

【讨论】:

对数字键的评论促使我重新思考最终帮助我保存数据的数据库结构。谢谢。 很高兴听到 ? --- 一定要检查What should I do when someone answers my question? 你也能帮忙解决这个问题吗!!! ***.com/questions/70185637/…【参考方案2】:

我不能评论,但我可以回答,但我不知道我的回答是否正确。

如果您只更新数组中的最后一项,在我看来,您在每次迭代时都会覆盖同一个对象,最后只将该对象保存到数据库中。 有附加方法吗?还是文档对此有任何说明? 这对我来说似乎是最可能的原因。

也许您每次都需要一个“databaseReference”对象的新实例。

【讨论】:

这促使我重新思考数据库结构。谢谢。

以上是关于如何使用 Java 将 Arraylist 数据写入 Firebase 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

java ArrayList 如何读取文件中的数据,并且搜索

如何使用java和jsp和extjs将java arraylist转换为json数组存储数据

java中如何将数据封装为JSON包?

c#里面arraylist中有792*5个数,我需要每5个数为一组取出,并且绑定到datagridview中去,如何写?求代码

ArrayList<ArrayList<String>> 这种结构的数据,java如何删除其中的某一列元素??

Java如何正确的将数值转化为ArrayList?