【问题标题】:Not Getting Complete Data from Firebase未从 Firebase 获取完整数据
【发布时间】:2025-12-10 16:50:01
【问题描述】:

我在 Firebase 数据库中创建了一些用户和他们的孩子,我也填充了它,但是当我从数据库中读取时,它给了我不完整的数据。我有一个 数据库 > 费用管理器 > 用户 > 费用。我正在从费用中检索数据。费用连续包含 3 个重复值,我总共有 10 个条目,但是当我检索时,我只得到 9 个条目。缺少三个重复值之一。我在 childEventListener > onChildAdded() 中使用每个循环。

 database = FirebaseDatabase.getInstance();
    DatabaseReference myRef = database.getReference("ExpenseManager");

    mChildEventListener = new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            for(DataSnapshot dataSnapshots : dataSnapshot.getChildren()){

                expenseTestModelValues = (ExpenseTestModel) dataSnapshot.getValue(ExpenseTestModel.class);
                readValue.setText(expenseTestModelValues.getExpName()
                        +"\n "+expenseTestModelValues.getExpType()
                        +"\n "+expenseTestModelValues.getExpAmt()
                        +"\n "+expenseTestModelValues.getDate()
                        +"\n "+expenseTestModelValues.getMonth()
                        +"\n "+expenseTestModelValues.getYear());

            }


            Log.e(TAG,expenseTestModelValues.getExpName()
                    +"\n "+expenseTestModelValues.getExpType()
                    +"\n "+expenseTestModelValues.getExpAmt()
                    +"\n "+expenseTestModelValues.getDate()
                    +"\n "+expenseTestModelValues.getMonth()
                    +"\n "+expenseTestModelValues.getYear());

        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

        }

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

        }
    };
    myRef.child(currentUser.getUid()).child("expenses").addChildEventListener(mChildEventListener);

这是数据库的图像

日志也只打印 9 个条目而不是 10 个。 如果我的所有条目都相同,那么当我从数据库中读取时,它只会给我 2 个条目。 我也尝试过 ValueEventListener 。但是遇到同样的问题。 请帮忙!!!。

ExpenseTestModel

package com.nkbw.expensemanager.test;

公共类 ExpenseTestModel {

String date;
String month;
String year;
String expName;
String expType;

public ExpenseTestModel() {

}

public ExpenseTestModel(String date, String month, String year, String expName, String expType, String expAmt) {
    this.date = date;
    this.month = month;
    this.year = year;
    this.expName = expName;
    this.expType = expType;
    this.expAmt = expAmt;
}

public String getDate() {
    return date;
}

public void setDate(String date) {
    this.date = date;
}

public String getMonth() {
    return month;
}

public void setMonth(String month) {
    this.month = month;
}

public String getYear() {
    return year;
}

public void setYear(String year) {
    this.year = year;
}

public String getExpName() {
    return expName;
}

public void setExpName(String expName) {
    this.expName = expName;
}

public String getExpType() {
    return expType;
}

public void setExpType(String expType) {
    this.expType = expType;
}

public String getExpAmt() {
    return expAmt;
}

public void setExpAmt(String expAmt) {
    this.expAmt = expAmt;
}

String expAmt;

}

这是最后三个条目的图像。最后第二个和最后三分之一具有相同的值。所以我只得到最后的第二个和第三个条目之一,而不是两者。 我总共有 10 个条目,我只得到 9 个。为什么会这样。

【问题讨论】:

  • 您正在尝试访问expenses ?你能告诉你ExpenseTestModel
  • 是的,我正在访问费用。我在帖子中添加了 ExpenseTestModel。 @弗兰肯斯坦
  • 可以在这个ExpenseTestModel()中存储数据吗?
  • 是的。它甚至存储在 firebase 数据库中
  • 问题是,如果我有多个重复数据并且当我读取这些值时,我不会从数据库@frankenstein 获得总条目

标签: java android firebase android-studio-3.0


【解决方案1】:

试试这个

创建列表以存储所有数据

   List<ExpenseTestModel> list=new ArrayList();

现在将数据存储在列表中

   myRef.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
           list.clear();
        for (DataSnapshot childDataSnapshot : dataSnapshot.getChildren()) {
         ExpenseTestModel     expenseTestModelValues = (ExpenseTestModel) dataSnapshot.getValue(ExpenseTestModel.class);
         list.add(expenseTestModelValues);
        }
     // Now  print size of list
    Log.e("list size",":"+list.size()); 
    }
    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

【讨论】:

  • 同样的问题。在 10 个 @frankenstein 中获得 9 个条目
  • 好的。添加计数器并检查“for循环”执行了多少次。
  • @Nomankhanbhai 我只是尝试通过重复数据创建像你这样的问题。但是问题并没有出现。这意味着 firebase 没有什么问题你的 code 。我刚刚更新了我的答案。如果您仍然遇到同样的问题,请告诉我。
  • 非常感谢先生。有效 !!!。但是当我在日志中打印计数时,它给了我完整的列表。否则存在同样的问题。不知道为什么。但你的方法有效并帮助了我。 @弗兰肯斯坦