我对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代码移到我的主要活动中,这看起来也很丑陋,没有封装。
我的一般设计在这里完全错了吗?我对事件驱动编程并不熟悉。
(谢谢)
谢谢弗兰克,它的魅力! –