适用于Unity3d Android ValueChanged的Firebase数据库取消订阅问题

时间:2018-11-02 13:50:57

标签: android database firebase unity3d

我对Unity3d SDK有问题。 我订阅ValueChanged事件,并在第一次调用它时取消订阅处理程序。 在Unity中,一切正常。 但是,当我为Android构建项目时,取消订阅失败:取消订阅后,我仍然在处理程序中处理事件。 这是代码:

public void CheckUserExists()
{
    FirebaseDatabase.DefaultInstance
        .GetReference("users").Child(primary_key)
        .ValueChanged += CheckUserExistsHadler;
}

void CheckUserExistsHadler(object sender, ValueChangedEventArgs e)
{
    FirebaseDatabase.DefaultInstance
        .GetReference("users").Child(primary_key)
        .ValueChanged -= CheckUserExistsHadler;

    if (e.Snapshot == null || e.Snapshot.Value == null)
    {
        print("user_exists");
    }
    else
    {
        print("user_not_exists");
    }
}

3 个答案:

答案 0 :(得分:0)

感谢小费。我改为

df.a=df.a.astype(float)
df.at[1,'a']=np.nan
df
Out[43]: 
     a  b
1  NaN  1
2  1.0  1
3  1.0  1

效果很好

答案 1 :(得分:0)

我只是在Android平台上遇到过这个问题,在编辑器中工作过。

我发现,当我在取消订阅时重新创建数据库引用时,使用与用于添加侦听器的引用字符串完全相同的引用字符串,在Android中将无法正确取消订阅。

我使用的解决方案与上面的Bestlis相同,我创建了一个DatabaseReference变量,该变量曾经用于进行sub和un-sub的操作,现在可以使用了。

遇到一个奇怪的问题,就像FirebaseDatabase.DefaultInstance.GetReference在操作过程中发生变化吗?

答案 2 :(得分:0)

由于某种原因,通过回调进行的任何Firebase调用都会失败(Getvalue,updatechildren,subscribe / unsubscribe等)。最好的选择是将其放入操作队列中,并使其行为能够检查队列/列表并从主线程中调用其内容。