firebase中的并发事务在读取dataSnapshot时产生null

时间:2017-06-25 20:48:59

标签: android firebase firebase-realtime-database

两个应用使用相同的firebase数据库。一个应用程序,即 A 正在使用 setValue 写入一些值。第二个应用程序,即 B 正在尝试使用 addListenerForSingleValueEvent 读取一些数据,这些数据适用于 A ,例如 A 用户个人资料信息同时。这会导致在读取数据库时 B 应用程序中的数据快照为空值。任何人都可以指导我如何避免这种情况。

只是为了澄清一点, A 正在写一些其他节点,而 B 正在访问该节点。

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

public class MyBaseClass<T>
{
    public virtual T MyMethod() { return default(t); }
}
public class MyIntClass : MyBaseClass<int>
{
    public override int MyMethod() { return 1; }
}

public class MyListClass : MyBaseClass<List<string>>
{
    public override List<string>> MyMethod() { return new List<string>(); }
}

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

1 个答案:

答案 0 :(得分:2)

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

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

A 写入Firebase时,可能会删除以前存在的usersRef中的某些属性。