在我的片段onCreateView中运行此方法
List<Product> mProducts = Database.getDatabase(mRef).getProducts();
这是我的数据库类:
public class Database {
private FirebaseDatabase mDb;
private DatabaseReference dbRef;
private static Database sDatabase;
private List<Product> mProducts;
public static Database getDatabase(DatabaseReference ref) {
if(sDatabase == null) {
sDatabase = new Database(ref);
}
return sDatabase;
}
public Database(DatabaseReference mReference) {
this.mDb = FirebaseDatabase.getInstance();
this.dbRef = mReference;
}
public List<Product> getProducts() {
mProducts = new ArrayList<>();
dbRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot data : dataSnapshot.getChildren()) {
mProducts.add(data.getValue(Product.class));
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
return mProducts;
}
在通过调试器时,getProducts()方法没有被调用,它会创建一个新的Database实例,并且永远不会到达getProducts()方法。稍后的List用于recyclerView适配器。
答案 0 :(得分:0)
mProducts 将为空列表,因为addValueEventListener需要一些时间才能返回,并且您在设置侦听器后返回值 解决方法是,当您获得回调方法 onDataChange
中的产品列表时,您必须发回一些回调