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