当我尝试将数据库中的所有数据作为列表获取时,我从调试器中收到以下错误,代码返回一个空列表。
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;
}
答案 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;
}
}