Android 如果数据不存在,则添加到Firebase
第一次询问,就这样。我正在尝试为Android和Firebase编写一些Java,我需要检查事件记录是否存在,如果不存在,则将其添加到子级。我目前正在使用一个节点存储事件的特定细节,另一个节点只存储城市信息 这就是我的数据库的外观:Android 如果数据不存在,则添加到Firebase,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,第一次询问,就这样。我正在尝试为Android和Firebase编写一些Java,我需要检查事件记录是否存在,如果不存在,则将其添加到子级。我目前正在使用一个节点存储事件的特定细节,另一个节点只存储城市信息 这就是我的数据库的外观: App: { Details: { eventName: Name eventType: Type eventCity: Location etc, etc... } OnlyCities: {
App: {
Details: {
eventName: Name
eventType: Type
eventCity: Location
etc, etc...
}
OnlyCities: {
}
这是为了检查并仅向OnlyCities列表添加新条目:
appRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
onlyCitiesRef.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot data : dataSnapshot.getChildren()) {
if (!data.hasChild(eventCity)) {
onlyCitiesRef.push().setValue(eventCity);
}
else {
Toast.makeText(getApplicationContext(), "City already exists", Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
我的问题是,我无法仅检查城市以查看其中是否存在某些内容,因为EventListener的触发器是onDataChange,如果我不检查就不添加数据,那么就永远不会有“数据更改”
有人能给我一些关于如何避开这个问题的指导吗?有没有什么方法可以在不解雇听众的情况下获得datasnapshot?我想,获得儿童号码可以解决这个问题。好的luckIt听起来像是在运行一个事务,它将读写结合到一个操作中: