簡體   English   中英

如何將 Arraylist 數據寫入 Java 中的 Firebase 數據庫?

[英]How can I write Arraylist data to Firebase Database in Java?

我有一個以 firebase 作為后端的 android 應用程序。 我有一個活動,使用填充他們想要保存到數據庫的回收器視圖的列表。

下面是我的數據庫的 Firebase 實時數據庫結構的截圖: 在此處輸入圖像描述

Values節點中子項的值是我用來為添加的新數據創建 id 的值。

我有一個由用戶填充的銷售對象 arraylist 將保存在新的Sales節點中,並希望使用Values/Sales中的值來填充 arraylist 中每個項目的 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")(Integer.parseInt(newCount)); // Updates the number of sales
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

如果 arraylist 中有 7 個項目,我想要一種方法將它們都保存在類似於“ Purchases ”節點的“ Sales ”中,而不僅僅是 arraylist 上的最后一個項目。

我無法評論,但我可以回答,但我不知道我的回答是否正確。

如果您只更新數組上的最后一項,在我看來,您在每次迭代時都會覆蓋相同的 object 並最終僅將 object 保存到數據庫中。 有沒有 append 方法? 還是文檔對此有任何說明? 這對我來說似乎是最可能的原因。

也許您每次都需要一個“databaseReference”對象的新實例。

我無法發表評論。 添加最后一個元素后,您可以粘貼樹的屏幕截圖嗎?

這不起作用(我很驚訝它甚至可以編譯):

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

寫回增加的銷售數量:

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

請注意,通常在 Firebase 中使用此類順序數字鍵是一種反模式。 我強烈建議使用 Firebase 的本機push()鍵,它們也總是遞增,但除此之外提供更強大的保證。 要了解更多信息,請查看: 最佳實踐:Firebase 中的 Arrays

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM