我正在尝试使用firebase作为我的数据库来开发停车移动应用程序。
以下是我的代码示例
public long freeSlots;
public String fp1status;
//Firebase database connection declaration
fbase= new Firebase("https://justpark-acdb7.firebaseio.com/Firstfloor/");
final Firebase fbaseFreeSlots=fbase.child("freeSlots");
Firebase firebaseparking1=fbase.child("fparking1");
//I get the freeSlots value everytime it changes and set my long freeSlots into it
fbaseFreeSlots.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
freeSlots = dataSnapshot.getValue(Long.class);
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
//everytime a parking slot gets freed or occupied, i set my freeSlots child, into either +1 or -1 depending on the action of the user.
firebaseparking1.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
fp1status = dataSnapshot.getValue(String.class);
if (fp1status.equals("Occupied")) {
Fragment fp1;
fp1 = new occupiedFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fparking1, fp1);
ft.commit();
if(freeSlots>0) {
freeSlots = freeSlots - 1;
fbaseFreeSlots.setValue(freeSlots);
}
} else if (fp1status.equals("Free")) {
Fragment fp1;
fp1 = new freeFragment();
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.fparking1, fp1);
ft.commit();
if(freeSlots<28) {
freeSlots = freeSlots + 1;
fbaseFreeSlots.setValue(freeSlots);
}
}
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
它正在工作,但价值似乎搞乱,我有firebaseparking(最多28),它看起来一样,所以我不会上传它,以避免长代码。我的代码有什么问题吗?或者是否有可能将孩子的数据(freeSlots)依赖于其他孩子?(每个停车位)在火场?
答案 0 :(得分:0)
无法自动计算数据库端的值,因此您需要寻找替代解决方案。这是一个可以清理应用程序中所有重复代码的想法:
fparkingX
节点(复制粘贴或不复制,仍然闻起来),而是直接订阅他们的父级。freeSlots
节点。