Android 如果数据不存在,则添加到Firebase

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: {

第一次询问,就这样。我正在尝试为Android和Firebase编写一些Java,我需要检查事件记录是否存在,如果不存在,则将其添加到子级。我目前正在使用一个节点存储事件的特定细节,另一个节点只存储城市信息

这就是我的数据库的外观:

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听起来像是在运行一个事务,它将读写结合到一个操作中: