我對Android/Java/Firebase相當陌生,因此可能在此處出現錯誤的軌道,請隨時引導我進入任何方向......瞭解如何在事件處理程序完成時執行某些操作Android,Firebase
我想簡單地理解如何「做什麼」 後事件處理程序已經完成了它的工作....
具體來說,我想「乾淨」 enscapulate火力對象管理。我有一個包含用戶數據的本地對象(用戶,本例)。用戶數據的子集(子類)存儲在Firebase上。也就是說,用戶對象數據的平衡僅在本地存儲,因爲我可以將其計算爲運行時,否則將這些數據存儲在Firebase上是不合理或不必要的。 (我認爲這個細節與實際問題無關)
子類(UserFireBase)被設計爲可以使用JSON串行器中的buit在一行中直接從Firebase讀取/從Firebase中讀取。下面的例子:
public Class User{
String UserID
Image userPhoto; //example of locally held User data
Boolean dataReadComplete=false;//a very poor locking device
public Class UserFirebase {//User Data stored on a Firebase Node
String UserName
String UserWebsiteURL
}
public void writeUserDatatoFB(){
refUserTree = new Firebase(FIREBASE_URL + "Users");
refUserTree.child(UserID).setValue(UserFirebase);//this works just fine
}
public void readUserDataFromFB(){
refUserTree = new Firebase(FIREBASE_URL + "Users");
dataReadComplete=false;
refUserTree.child(userID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
UserFirebase = dataSnapshot.getValue(UserFirebase.class);
dataReadComplete=true;
}
@Override
public void onCancelled(FirebaseError firebaseError) {}});
所以這並不工作,從主要活動,我可以去有效:
user.readUserDataFromFB();
//wait until dataReadComplete=true, then do some stuff
user.writeDataToFB();
但它只是似乎錯了,醜陋的設計。即一次性事件處理程序完成後,代碼執行的最佳實踐是什麼?例如在其他語言中,我可能能夠將方法作爲參數傳遞給WriteUserData函數,以便當它完成時,它會調用我需要執行的下一位代碼...
我現在唯一能想到的其他解決方案是將WriteUserData代碼移到我的主要活動中,這看起來也很醜陋,沒有封裝。
我的一般設計在這裏完全錯了嗎?我對事件驅動編程並不熟悉。
(謝謝)
謝謝弗蘭克,它的魅力! –