Android 从Firebase数据库获取信息

Android 从Firebase数据库获取信息,android,arrays,firebase,firebase-realtime-database,nullpointerexception,Android,Arrays,Firebase,Firebase Realtime Database,Nullpointerexception,我正在尝试从firebase实时数据库中检索数据。我有这样的结构: 现在我试着这样查询它: private void firebaseListView(){ Query query = FirebaseDatabase.getInstance().getReference() .child("expenses") .child(mAuth.getCurrentUser().getUid()) .orderByVa

我正在尝试从firebase实时数据库中检索数据。我有这样的结构:

现在我试着这样查询它:

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) {

        }
    });

}
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;
MEExpenseList
是类
Expenses
看起来是这样的:

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) {

        }
    });

}
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)”


如何修复此问题?

您遇到此错误是因为您试图将类型为
Expenses
class的对象添加到从未初始化过的列表中。要解决此问题,只需创建
meexpenselist
变量作为全局变量:

private List<Expenses> mExpenseList;
就这样

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