Firebase没有这样的实例字段'databaseReference'

时间:2017-10-28 07:19:23

标签: android firebase firebase-realtime-database

当我尝试将数据库中的所有数据作为列表获取时,我从调试器中收到以下错误,代码返回一个空列表。

public static DbOps get(Context ctx) {
    if (sDbOps == null) {
        sDbOps = new DbOps(ctx);
    }
    return sDbOps;
}

private DbOps(Context ctx) {
    dbRef = FirebaseDatabase.getInstance().getReference().child("products");
    if(mProducts == null) {
        getProducts();
    }
}



public List<Product> getProducts() {
    dbRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Iterator<DataSnapshot> iterator = dataSnapshot.getChildren().iterator();
            mProducts = new ArrayList<>();
            while (iterator.hasNext()) {
                Product pr = dataSnapshot.getValue(Product.class);
                mProducts.add(pr);
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    return mProducts;
}

image

1 个答案:

答案 0 :(得分:0)

错误是因为您是trying to access a variable that is not declared in the scope of that function

要解决这个问题,一个简单的解决方案是,将变量作为该类的私有或公共成员,以便所有成员函数都可以访问它。

实施例

public class classname{
    private FirebaseDatabase dbRef;

    @Override
    public void onStart(Intent intent, int startid) {
        dbRef = FirebaseDatabase.getInstance().getReference().child("products");
    }

   //Or initialize in your own function
    private DbOps(Context ctx) {
        dbRef = FirebaseDatabase.getInstance().getReference().child("products");
        if(mProducts == null) {
           getProducts();
        }
    }

    public List<Product> getProducts() {
        dbRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                Iterator<DataSnapshot> iterator = dataSnapshot.getChildren().iterator();
                mProducts = new ArrayList<>();
                while (iterator.hasNext()) {
                    Product pr = dataSnapshot.getValue(Product.class);
                    mProducts.add(pr);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        return mProducts;
    }
}