我是一個核心的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