【问题标题】:Every time array list overrides the old values. How can I insert new values to array?每次数组列表都会覆盖旧值。如何将新值插入数组?
【发布时间】:2022-01-22 14:14:00
【问题描述】:

我正在使用 firebase 在 android studio (java) 中为特定用户组的应用创建一个简单的咖啡馆购买模块。 在其中,我有一个用户列表,在该列表下指定了一个名为“cafeTrans”的字段来获取用户的“按日期”购买。我想记录每次购买的账单金额。由用户制作。我创建了一个列表,每次用户购买某些东西时,旧值都会被覆盖。我想节省每一笔购买金额。

怎么办?有人可以帮我做什么吗? 我将非常感谢您的帮助。因为我是新手,所以一直在思考这个问题将近一个星期。

功能代码:

cafeTransList = new ArrayList<>(); // Initiated at onCreate


public void uploadBillAmount(){

    cafeTransListLevel = userLevel.child("cafeTrans").child("20211127");

    cafeTransList.add(String.valueOf(billAmtInt));


    cafeTransListLevel.setValue(cafeTransList).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if(task.isSuccessful()){
                Log.i("Data Added", String.valueOf(billAmtInt));

            }
        }
    });
}

**userLevel indicates the DB node of the individual user
**billAmtInt indicates the purchase value

我的用户模型类:

public class User {

    private String lastUpdate, username, level, score, busNo, email, cash, dailylimit;
    private List<String> cafeTransList;


    public User(String lastUpdate, String username, String level, String score, String busNo, String email, String cash, String dailylimit, List<String> cafeTransList) {
        this.lastUpdate = lastUpdate;
        this.username = username;
        this.level = level;
        this.score = score;
        this.busNo = busNo;
        this.email = email;
        this.cash = cash;
        this.dailylimit = dailylimit;
        this.cafeTransList = cafeTransList;
    }

    public User() {
    }

    public String getLastUpdate() { return lastUpdate; }

    public void setLastUpdate(String lastUpdate) {
        this.lastUpdate = lastUpdate;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }


    public String getLevel() {
        return level;
    }

    public void setLevel(String level) {
        this.level = level;
    }

    public String getScore() {
        return score;
    }

    public void setScore(String score) {
        this.score = score;
    }

    public String getBusNo() {
        return busNo;
    }

    public void setBusNo(String busNo) {
        this.busNo = busNo;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getCash() {
        return cash;
    }

    public void setCash(String cash) {
        this.cash = cash;
    }


    public String getDailylimit() {
        return dailylimit;
    }

    public void setDailylimit(String dailylimit) {
        this.dailylimit = dailylimit;
    }

    public List<String> getcafeTransList() {
        return cafeTransList;
    }

    public void setcafeTransList(List cafeTransList) {
        this.cafeTransList = cafeTransList;
    }
}

我的数据库结构:

“User-ID XXXXXXXXXXXXXXXXXXXX” : {
      "busNo" : "2",
      "cafeTrans" : 
        {
        "20211127" : [ "10" ] // this list values are getting overridden every time a new purchase is made for the date.
        },
      "cash" : "30",
      "dailylimit" : "0",
      "email" : "a@b.com",
      "lastUpdate" : "20211209",
      "level" : "6",
      "score" : “0”
      "username" : "Demo"

【问题讨论】:

    标签: java android firebase firebase-realtime-database arraylist


    【解决方案1】:

    要将项目添加到数组中,您必须知道该数组中现有项目的数量。因此,您首先必须从数据库中读取现有项目,然后在代码中将项目添加到数组中,最后将结果数组(或仅按其索引的新项目)写回数据库。

    这是非常低效的,这就是为什么 Firebase 建议不要对列表使用数组结构,而是提供自己的内置 push() 方法来生成唯一的、始终递增的键。有关这方面的更多信息,请参阅 adding an item to a list 上的 Firebase 文档。

    要详细了解为什么数组不是 Firebase 的出色数据结构,请阅读 Kato 在 Best Practices: Arrays in Firebase 上的经典文章。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 1970-01-01
      • 2010-09-28
      • 1970-01-01
      • 2012-10-02
      • 1970-01-01
      相关资源
      最近更新 更多