[英]Java Maven project can't write data to Firebase Realtime Database
[英]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.