我对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");
}
}
答案 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等)。最好的选择是将其放入操作队列中,并使其行为能够检查队列/列表并从主线程中调用其内容。