我是一个核心的Java人,有点新的android。我想遵循与我的Java应用程序中所做的相同的旧类设计模式:采用firebase异步的类设计onDataChanged
考虑到标准crud。 A基础DAO将在数据库的单一实例(FirebaseDatabase)创建:
FirebaseDatabase database = FirebaseDatabase.getInstance();
一个EntityDAO延伸BaseDAO从BaseDAO使用数据库,得到基准说Product
:
DatabaseReference productRef = database.getRef("products");
productRef.addValueEventListener(...)
将有一个服务调用DAO访问产品数据的类。
如何修改此模式以处理async onDataChanged
?
示例代码:
//ProductDAO.java
public class ProductDAO {
private FirebaseDatabase fb;
private DatabaseReference productRef;
private Product product;
public ProductDAO(){
fb = FirebaseDatabase.getInstance(); //Already linked in the firebase console
productRef = fb.getDatabaseReference("product");
productRef.addValueEventListener(new ValueEventListener(){
onDataChange(..){
Log.i("AZ", dataSnapshot.getValue().toString());
}
});
}
public ProductDAO getInstance(){
return new ProductDAO();
}
public Product getProduct(){
return Product; //This will be null because the listener is not completed when the getInstance loads;
}
}
//ProductService.java
public class ProductService{
private ProductDAO productDAO = ProductDAO.getInstance();
public Product getProducts(){
return productDAO.getProducts(); //This will always return null
}
}
我很难理解你的问题,因为它主要是关于你似乎很熟悉的模型,但我不知道。你能分享[重现问题的最小代码](http://stackoverflow.com/help/mcve)吗? –
但是,如果你想抽象的事实,数据异步加载,你可能想阅读我的答案在这里:http://stackoverflow.com/questions/33203379/setting-singleton-property-value-in-firebase -listener –
@FrankvanPuffelen。感谢您的评论。公然试图在这里做一个MVC类型的设计。但这里唯一的问题是,与传统的数据库查询来检索db项目列表不同,firebase总是工作异步。当我说DAO的getInstance()。道还没准备好。它会一直返回空值。 – madhairsilence