Android firebase中的并发事务在读取dataSnapshot时导致null

Android firebase中的并发事务在读取dataSnapshot时导致null,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,两个应用程序使用相同的firebase数据库。一个应用程序,即A正在使用setValue写入一些值。第二个应用程序,即B正在尝试使用addListenerForSingleValueEvent读取一些数据,同时与A类似A用户配置文件信息相关。这导致在读取数据库时,Bapp中的datasnapshot值为空。谁能指导我如何避免这种情况 只是为了澄清一下,A正在从被B访问的节点写入其他节点 这就是我从B应用程序访问数据的方式 DatabaseReference usersRef = MyDataba

两个应用程序使用相同的firebase数据库。一个应用程序,即A正在使用setValue写入一些值。第二个应用程序,即B正在尝试使用addListenerForSingleValueEvent读取一些数据,同时与A类似A用户配置文件信息相关。这导致在读取数据库时,Bapp中的datasnapshot值为空。谁能指导我如何避免这种情况

只是为了澄清一下,A正在从被B访问的节点写入其他节点

这就是我从B应用程序访问数据的方式

DatabaseReference usersRef = MyDatabaseUtils.getUsersReference();
    usersRef.orderByChild("userId").equalTo(userIdValue).addListenerForSingleValueEvent(new ValueEventListener() {

        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get value
            if (dataSnapshot.getChildrenCount() > 0) {
                 // Do something
            } else {
                // Show error
            }
        }

        @Override
        public void onCancelled(final DatabaseError databaseError) {
           // Show error
        }
    });

如果我在B应用程序中阅读时停止A写作,一切正常。

一个简单的解决方案是防止
datasnapshot
onDataChange
函数中为空:

if (dataSnapshot != null && dataSnapshot.getChildrenCount() > 0) 

A写入Firebase时,它可能正在从先前存在的
usersRef
中删除一些属性。

您能否包含函数或类的代码片段,该函数或类使用app B中的
addListenerForSingleValueEvent
,我已经更新了帖子。你能解释一下应用程序A中发生的导致B的
ValueEventListener
启动其
onDataChange
功能的确切时刻/动作吗?如果您得到一个NullPointerException,还有一个堆栈跟踪,它正好指向引发异常的行。请找到堆栈跟踪,在您的问题中共享它,并指出引发异常的行。我没有NullPointerException。dataSnapshot结果为null。问题不在于为应用程序添加null数据,问题在于,为什么它会返回null数据。从应用程序A,您在用户/节点下向Firebase发送了哪些特定写入?可能是您正在使用
setValue()
来删除指定位置的数据,而不是使用可能更合适的
updateChildren()
。A正在从B访问的节点写入其他节点。