【问题标题】:Getting Information from Firebase Database从 Firebase 数据库获取信息
【发布时间】:2018-02-26 20:34:31
【问题描述】:

我正在尝试从 firebase 实时 database 检索数据。我有这个结构:

现在我尝试这样查询:

private void firebaseListView(){

    Query query = FirebaseDatabase.getInstance().getReference()
            .child("expenses")
            .child(mAuth.getCurrentUser().getUid())
            .orderByValue();

    query.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

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

                Expenses expenses = dataSnapshot.getValue(Expenses.class);

                mExpenseList.add(expenses);

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}

mExpenseListExpenses 类的数组 它看起来像这样:

private long id;
private String name;
private double value;
private String category;
private String date;
private String location;
private long category_id;
private String firebase_id;

当我运行调试器时,我从数据库中获取信息,但它显示:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“boolean java.util.ArrayList.add(java.lang.Object)”

我该如何解决这个问题?

【问题讨论】:

  • 您查询中的.orderByValue() 没有意义,但这不是导致崩溃的原因。这似乎只是因为您没有在任何地方初始化mExpenseList

标签: android arrays firebase firebase-realtime-database nullpointerexception


【解决方案1】:

您收到此错误是因为您尝试将 Expenses 类类型的对象添加到从未初始化的列表中。要解决这个问题,只需将您的 mExpenseList 变量创建为全局变量:

private List<Expenses> mExpenseList;

然后在您的onCreate() 方法中使用以下代码行对其进行初始化:

mExpenseList = new ArrayList<>();

就是这样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2020-04-15
    • 2019-10-22
    • 2021-09-17
    • 2016-09-03
    • 1970-01-01
    相关资源
    最近更新 更多